2013-08-22 84 views
-1

什麼是看着關聯數組的數組,找到滿足參數節點的最有效方法是什麼?查找嵌套的數組元素,返回節點(最有效的方式)

我想有翻翻陣列查找並返回父節點更有效的方式,只是通過循環 - 看着每一個元素,如果匹配返回。 (它也是安全的假設,有沒有數據的副本 - 這樣的首次發現,也是唯一一個找到)

或者是一個for循環的最好的事情Ive得到?

例如

array(
[0] => array('name' => 'fred'), 
[1] => array('name' => 'dave'), 
[2] => array('name' => 'mike) 
) 

,並希望獲取數據的節點,在名稱==「大衛」,或者看看是否有其實它有設置爲「戴夫」一個元素名稱的節點。

例如財產以後像

isset($data[]['name'] == 'dave') 
$info = getdata($data[]['name'] == 'dave') 

(道歉,如果我不使用正確的技術術語,請糾正我,我不喜歡學習!)

提前任何建議非常感謝! =)

+0

http://stackoverflow.com/questions/1019076 /如何對搜索按鍵值-IN-A-多維陣列功能於PHP – Khior

+0

在你的第二個片段,你不使用isset正確。 isset只是檢查一個變量是否存在,你不能評估isset中的邏輯表達式。 – ILikeTacos

回答

2

有沒有更好的辦法比循環。 PHP不能執行任何不涉及依次查看每個元素的魔法。

如果你經常這樣做,由搜索準則有助於指數的數組:

$data = array(
    array('name' => 'Dave'), 
    array('name' => ...) 
); 

$indexedData = array(); 
foreach ($data as $datum) { 
    $indexedData[$datum['name']] = $datum; 
} 

$info = $indexedData['Dave']; 

只要你的數據結構是次優的,這裏只有進入它的次優方式。

0

這裏的數組遞歸一個級別的功能。我們使用foreach()循環遍歷每個第二層子數組,然後使用內置函數array_search來查看它是否存在。

function as_nested($needle,$haystack){ 
    $val; 
     foreach($haystack as $key=>$arr){ 
      $arr_key = array_search($needle,$haystack[$key]); 
      if(!empty($arr_key)){ 
      $val = $key; 
      } 
     } 
    return $val; 
    } 

要執行,您提供的針,然後草堆。

echo as_nested('dave',$myArray); 

輸出使用初始陣列是1

$myArray[0] = array('name'=>'fred'); 
    $myArray[1] = array('name' => 'dave'); 
    $myArray[2] = array('name' => 'mike'); 
0

在php中有一個函數叫做in_array(),它尋找數組中的值。

//Code credit to @deceze 
$data = array(
    array('name' => 'Dave'), 
    array('name' => ...) 
); 

function getData($data, $searchValue) { 
    foreach ($data as $datum) { 
     if (in_array($searchValue, $datum)) { 
     return $datum; 
    } 
} 
//array returned when $searchValue is found. 

可以使用的getData功能來搜索數組中的一個值(這是不特定索引。即,不僅通過名稱的限制等)

+0

'in_array'也在內部循環,所以沒有太多的勝利真的。 – deceze

+0

@deceze有趣。我覺得這樣做,但我這樣做(在一個函數中),因爲提交者使用getData函數 – Mic1780

相關問題