2016-04-14 12 views
1

私は本当にシンプルな何かが欠落していると確信していますが、フィードを私のビューで参照するためのきれいな連想配列に変換しようとしています。ここで配列のキー値のペアでPHPの問題

ループは(それらを分割するためにフォーマットするいくつかのテキストで)です:

$headers = get_headers('https://s3-us-west-1.amazonaws.com/sg-retail/' . $file); 
     $metas = []; 

foreach($headers as $meta) { 
      $metaKey = strtok($meta, ':'); 
      $metaVal = ltrim(strstr($meta, ':'), ':'); 
      array_push($metas, [$metaKey => $metaVal]); 
     } 

私はこの結果を得る:

[{"HTTP\/1.1 200 OK":""},{"x-amz-id-2":" sNsiGT+p8eZaFJ3RxHKLe\/vN4BfJ27Zp6baI+OvXr+9VqSosNfpSfj73b0XnQAEXKsNgTzBSaM4="},{"x-amz-request-id":" 50EE32CE562BDBE1"},{"Date":" Thu, 14 Apr 2016 23:15:03 GMT"},{"x-amz-meta-featured":" Featured Style: DR349"},{"x-amz-meta-postcopy":" Choose a ring as unique as the woman wearing it, with help from @SimonGJewelry!"},{"x-amz-meta-title":" Friday, April 1"},{"x-amz-meta-hashtags":" #Ring #Jewelry #JewelryGram #EngagementRing #Style #Diamonds #HeAsked #SheSaidYes #Love #Wedding #WeddingInspo #SimonG #SimonGJewelry"},{"Last-Modified":" Thu, 14 Apr 2016 18:55:03 GMT"},{"ETag":" \"7042f7d9383e180d9ed8516d2df0428f\""},{"Accept-Ranges":" bytes"},{"Content-Type":" image\/jpeg"},{"Content-Length":" 499591"},{"Server":" AmazonS3"},{"Connection":" close"}] 

私には罰金だが、私は遅れてるか私のどちらかをこれらの入れ子配列を正しくフォーマットしませんでした。

これは動作します:

return $twitter_posts[0]["metas"]; 

私はキーによって特定の変数を取得しよう:それは%に私をteels

return $twitter_posts[0]["metas"]["x-amz-meta-postcopy"]; 

& $(オフ:

undefined index 

を編集:要求ごとの関数全体(関連性はないかもしれませんが、ここに行く):

関数コール:

$twitter_posts = \App\Asset::fetch('toolkit/social-media/twitter/post-images/'); 

機能:

public static function fetch($path) 
{ 
    $files = Storage::files($path); 
    $data = []; 

    foreach($files as $file) { 
     $headers = get_headers('https://s3-us-west-1.amazonaws.com/sg-retail/' . $file); 
     $metas = []; 

     foreach($headers as $meta) { 
      $metaKey = strtok($meta, ':'); 
      $metaVal = ltrim(strstr($meta, ':'), ':'); 
      array_push($metas, [$metaKey => $metaVal]); 
     }   

     $array = ['image' => 'https://s3-us-west-1.amazonaws.com/sg-retail/' . $file, 'metas' => $metas]; 
     array_push($data, $array); 
    } 

    return $data; 
} 

このコール:

array(15) { 
     [0]=> 
     array(1) { 
     ["HTTP/1.1 200 OK"]=> 
     string(0) "" 
     } 
     [1]=> 
     array(1) { 
     ["x-amz-id-2"]=> 
     string(77) " cJgthWyhsfIdX5zgNAmS6fp05iYv7gKt4dhThGtItV5QPv5MgLxYsRCfQ8uEwwuWmsSTWSULE5c=" 
     } 
     [2]=> 
     array(1) { 
     ["x-amz-request-id"]=> 
     string(17) " 2C043CB5EDF8F423" 
     } 
     [3]=> 
     array(1) { 
     ["Date"]=> 
     string(30) " Thu, 14 Apr 2016 23:33:38 GMT" 
     } 
     [4]=> 
     array(1) { 
     ["x-amz-meta-featured"]=> 
     string(22) " Featured Style: DR349" 
     } 
     [5]=> 
     array(1) { 
     ["x-amz-meta-postcopy"]=> 
     string(80) " Choose a ring as unique as the woman wearing it, with help from @SimonGJewelry!" 
     } 
     [6]=> 
     array(1) { 
     ["x-amz-meta-title"]=> 
     string(16) " Friday, April 1" 
     } 
     [7]=> 
     array(1) { 
     ["x-amz-meta-hashtags"]=> 
     string(134) " #Ring #Jewelry #JewelryGram #EngagementRing #Style #Diamonds #HeAsked #SheSaidYes #Love #Wedding #WeddingInspo #SimonG #SimonGJewelry" 
     } 
     [8]=> 
     array(1) { 
     ["Last-Modified"]=> 
     string(30) " Thu, 14 Apr 2016 18:55:03 GMT" 
     } 
     [9]=> 
     array(1) { 
     ["ETag"]=> 
     string(35) " "7042f7d9383e180d9ed8516d2df0428f"" 
     } 
     [10]=> 
     array(1) { 
     ["Accept-Ranges"]=> 
     string(6) " bytes" 
     } 
     [11]=> 
     array(1) { 
     ["Content-Type"]=> 
     string(11) " image/jpeg" 
     } 
     [12]=> 
     array(1) { 
     ["Content-Length"]=> 
     string(7) " 499591" 
     } 
     [13]=> 
     array(1) { 
     ["Server"]=> 
     string(9) " AmazonS3" 
     } 
     [14]=> 
     array(1) { 
     ["Connection"]=> 
     string(6) " close" 
     } 
    } 
+1

を...です関数内の最初のコードブロック?関数呼び出しを見ることはできますか?あなたは$ metasという配列を持っているように見えますが、突然別の配列$ twitter_postsがあります。どうやってそこに着いた? – larsAnders

+0

'return $ twitter_posts [0] ['metas']' ??これはどこから来たの? – Marcus

+0

@larsAnders ok私は関数全体を追加しました。これは、S3オブジェクトのメタデータを、ラベールアプリケーションのオブジェクトのURLとともに配列にパースする方法です。 –

答えて

2

あなたの配列が巣です:

return var_dump($twitter_posts[0]["metas"]); 

は、この結果を取得します1つのレベルが深すぎます。代わりにarray_pushの、あなたがそうこれに代えて、あなたがしたい形式を取得するには$array[$key]構文を使用することができます。

array_push($metas, [$metaKey => $metaVal]); 

を、あなたはこれを行うことができます:私たちは、ここでより多くのコードを参照する必要が

$metas[$metaKey] = $metaVal; 
+0

ブーム!私たちは勝者を持って、ありがとう。そのようなことが分かっていた –

+0

問題はありません。 json_decode()を使用してJSONを解析する方法については、上記のコメントに注意してください。 – larsAnders

関連する問題