2016-04-14 27 views
1

Eminim ki, gerçekten basit bir şeyi özlüyorum ama bir feed'i görünümlerime başvurmak için güzel ve temiz bir ilişkisel diziye dönüştürmeye çalışıyorum. Dizi anahtar değeri çiftleriyle php hatası

$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]); 
     } 

Bu sonuç almak:

[{"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"}] 

iyi gibi geliyor bana ama her iki Ben geri zekalı değilim ya ben burada

(onları ayırmak için bazı metin biçimlendirme ile) döngü bu iç içe dizileri doğru biçimlendirmedi.

Bu çalışır:

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

Ben anahtar ile belirli bir değişken elde etmeye çalışmak: Bu% beni teels

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

& $ (kapalı:

undefined index 

DÜZENLEME: istek başına tüm işlev (belki alakalı değil ama işte gidiyorsunuz):

işlev çağrısı:

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

fonksiyonu:

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; 
} 

bu çağrı:

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

... mı Yerine array_push, sen bunun yerine bu, istediğiniz biçimi elde etmek $array[$key] sözdizimi kullanabilirsiniz Bir fonksiyon içindeki ilk kod bloğu? Fonksiyon çağrısını görebilir miyiz? $ Metas denen bir dizi var gibi görünüyor ve sonra aniden başka bir $ twitter_posts çağırdı. Oraya nasıl gittin? – larsAnders

+0

'dönüş $ twitter_posts [0] ['metas']' ?? Bu nereden geliyor? – Marcus

+0

@larsAnders Tamam, tüm işlevi ekledim. S3 nesnesi metadatasını, bir laravel uygulaması için nesnenin url'si ile birlikte bir diziye ayrıştırmak için bir yöntemdir –

cevap

2

Sizin diziler yuva gibidir:

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

bu sonucu alır bir seviye çok derin.

Bunu yapmanın
array_push($metas, [$metaKey => $metaVal]); 

: Biz burada daha fazla kodu görmek gerekir

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

BOOM! Bir kazananımız var, teşekkürler. Bunun gibi bir şey olduğunu biliyordum –

+0

Sorun yok. JSON ayrıştırmak için json_decode() kullanarak hakkında yukarıdaki yorumları dikkate alın. – larsAnders