2010-06-04 65 views
1

我使用下面的代碼找到父陣列裏的數組,但它無法正常工作是重新調整空即使父陣列如何從父數組中找到數組?

$cards_parent = $feedData['BetradarLivescoreData']['Sport']['Category']['Tournament']['Match']; 
$cards = array(); 

foreach($cards_parent as $key => $card) 
{ 
    if ($key === 'Cards') 
    { 
     $cards[] = $cards_parent[$key]; 
     break; 
    } 
} 

你知道,將搜索父任何陣列功能指定鍵退出數組爲指定的鍵,如果找到它會創建一個數組從該鍵開始?

+0

很難從你的榜樣是什麼問題,是要告訴。給出一個'$ cards_parent'可能看起來像什麼的樣本。如果你的意思是數組中的關鍵點處於未知深度,請查看遞歸迭代。 – deceze 2010-06-04 06:49:00

+1

爲什麼'$ cards'是一個數組?它似乎只能保持一個值... – 2010-06-04 06:54:09

回答

0

請問您可以把print_r($feedData)起來嗎?我跑的下面的代碼

<?php 
$feedData = array('BetradarLivescoreData' => array('Sport' => array('Category' => array('Tournament' => array('Match' => array('Cards' => array('hellow','jwalk'))))))); 
$cards_parent = $feedData['BetradarLivescoreData']['Sport']['Category']['Tournament']['Match']; 
$cards = array(); 

foreach($cards_parent as $key => $card) 
{ 
    if ($key === 'Cards') 
    { 
     $cards[] = $card; 
     break; 
    } 
} 
print_r($cards); 

它返回一個已填充的陣列:

陣列([0] =>數組([0] => hellow [1] => jwalk))

所以你的代碼是正確的,它可能是你的數組$ feedData不是。

1

在這裏你可以使用遞歸:

function Recursor($arr) 
{ 
if(is_array($arr)) 
{ 
    foreach($arr as $k=>$v) 
    { 
    if($k == 'Cards') 
    { 
    $_GLOBAL['cards'][] = $card; 
    } else { 
    Recursor($arr[$k]); 
    } 
    } 
} 
} 

$cards_parent = $feedData['BetradarLivescoreData']['Sport']['Category']['Tournament']['Match']; 
$_GLOBAL['cards'] = array(); 
Recursor($cards_parent); 
+0

Uuuuh,'$ _GLOBAL' ...> _ <你真的應該'返回',而不是。 – deceze 2010-06-04 08:35:16

+0

不,我不應該。我需要通過所有數組。如果返回 - 遞歸將被中斷。 $ _Global在這裏是爲了紀念finded值並去到數組的末尾。 – GOsha 2010-06-04 09:18:25

+0

在遞歸調用中完全可以返回和合並值。無論如何,所有的遞歸調用都會隱式返回。如果你必須至少使用一個靜態變量。 – deceze 2010-06-04 12:29:56