2015-03-18 82 views
0

我得到這個PHP數組回從蘋果只有特定的陣列值APNS反饋服務:我怎麼訪問這個PHP數組

array(4) { 
    [0]=> string(64) "abc123" 
    [1]=> string(64) "def456" 
    [2]=> array(3) { 
      ["timestamp"]=> int(1426717247) ["length"]=> int(32) ["devtoken"]=> string(64) "xyz987" 
    } 
    [3]=> array(3) { 
      ["timestamp"]=> int(1426717247) ["length"]=> int(32) ["devtoken"]=> string(64) "xyz987" 
    } 
} 

如何使用PHP來遍歷數組,並建立逗號隔開只包含'devtoken'項目/值的數組元素的字符串?

更新:我一直在試圖與破滅做到這一點,這可能是做,能幹,但我最終使用的基礎上,從史蒂夫的答案,如下所示:

$deldevidstring=''; 
foreach($feedback_tokens as $element){ 
    if(is_array($element) && isset($element['devtoken'])){ 
     $deldevidstring .= $element['devtoken'] .',' ; 
    } 
} 
if(strlen(trim($deldevidstring)) > 0){ 
    echo trim("delete these... " . $deldevidstring, ','); 
} 
+2

你有沒有嘗試過的東西? – Rizier123 2015-03-18 22:33:24

+1

你在那裏有一個混合類型元素的數組(數值)。一些是字符串,另一些是數組(關聯)。循環遍歷父數組的每個元素並檢查每個元素是否爲數組。如果是,則檢查子數組以查看它是否包含名爲「devtoken」的鍵。如果是,則將與該鍵關聯的值附加到字符串中。 – bloodyKnuckles 2015-03-18 22:40:38

回答

1

迭代數組並建立您的字符串:

$string=''; 
foreach($array as $element){ 
    if(isset($element['devtoken'])){ 
     $string .=',' . $element['devtoken']; 
    } 
} 
echo trim($string, ','); 

或者爆一個FILT ERED陣列:

$string = implode(',', 
       array_filter(
        array_map(
         function($element){ 
          return $element['devtoken'] 
         }, 
         $array 
       ) 
      ) 
     ); 
+0

真棒....感謝,那第一點的代碼工作出色...我一直在修補內爆,但屠殺它可怕。非常感謝您對此的反饋/意見。 – tamak 2015-03-18 23:31:59

0

檢查了這一點:

<?php 

$str = ""; 

foreach($array as $arr) 
{ 
    if(is_array($arr)) 
    { 
     if(array_key_exists('devtoken', $arr)) 
     { 
      $str = implode(",", $arr)."\n"; 
     } 
    } 
} 

?> 
0

假設你已經設置$記錄=數組你回來:

$string = ''; 

foreach ($records as $record) { 
    if (isset($array['devtoken'])) { 
     $string .= $array['devtoken'] . ', '; 
    } 
} 
$string = substr($string, 0, -2); 
echo $string; 

沒有疑問,更優雅的方式來做到這一點,但對於短期和快速這似乎工作。

0

無需循環。隨着PHP> = 5.5.0:

$result = implode(',', array_column($array, 'devtoken')); 

對於早期版本沒有array_column

$result = implode(',', array_filter(array_map(function($v) { return $v['devtoken']; }, $array))); 
+0

這有效,但我不知道爲什麼你沒有得到一個未定義的索引通知,因爲並不是所有傳遞給閉包的元素都會有'devtoken'鍵?這是記錄在某處嗎?另外,你可能想要處理空的元素。 – Steve 2015-03-18 23:08:56

+0

@AbraCadaver仍然會證明是有用的,很高興知道,謝謝 – tamak 2015-03-18 23:29:19