2012-10-30 17 views
0

我有一個大的多維數組,其中我需要搜索某個值並檢索兄弟值。如何搜索多維數組以獲得同一級別的值?

如果我搜索的值爲29,我需要確保它屬於id的密鑰。一旦找到了,我需要label鍵的值。這兩個鍵都屬於同一個嵌套數組。

如:

[26]=> 
array(54) { 
    ["id"]=> 
    string(2) "29" 
    ["label"]=> 
    string(13) "Special Notes" 

在這個例子中,我尋找29,屬於一個id,返回label的值,它是Special Notes

除此之外,它得到一點點更復雜..

如果我正在搜索的值包含decimal,這也屬於密鑰id,但它在多個地方被提及。它所屬的grandparent密鑰必須是inputs,因此一旦驗證,就檢索label(它是id的同胞)的值。

如:

["inputs"]=> 
    array(3) { 
    [0]=> 
    array(2) { 
     ["id"]=> 
     string(4) "12.1" 
     ["label"]=> 
     string(4) "Name" 
    } 
    [1]=> 
    array(2) { 
     ["id"]=> 
     string(4) "12.2" 
     ["label"]=> 
     string(5) "Price" 
    } 
    [2]=> 
    array(2) { 
     ["id"]=> 
     string(4) "12.3" 
     ["label"]=> 
     string(8) "Quantity" 
    } 
    } 

在這個例子中,如果我搜索12.1它將返回Name - 確保這一切都屬於inputs

在此先感謝

+0

這個問題的問題是,它是如此特殊,唯一的答案是有人可以給的是實際上爲你解決整個事情。這是一個複雜的程序問題,編程就是解決問題,所以不要把它交給其他人!但是,這裏有一個提示 - 使用面向對象編程,而不是試圖遍歷一個龐大而複雜的數組。例如,使用複合模式可以保留父元素和子元素之間的鏈接。 –

回答

0

您可以直接過濾掉您的陣列改爲

$inputs = array(
     0 => array("id" => "12.1","label" => "Name"), 
     1 => array("id" => "12.2","label" => "Price"), 
     2 => array("id" => "12.3","label" => "Quantity")); 


$s = "12.1" ; // what you want 
$input = array_filter($inputs,function($v)use($s){ return $v['id'] == $s;}); 
var_dump($input); 

輸出

array 
    0 => 
    array 
     'id' => string '12.1' (length=4) 
     'label' => string 'Name' (length=4) 
1

這裏是一個簡單的例子。也許這將幫助...

$search_val = "12.1"; // value to search for 
foreach($inputs as $key=>$value){ 
    foreach($value as $keyassoc=>$val){ 
     if($keyassoc=="id"){ 
      if($val==$search_val){ 
       echo "found: ".$inputs[$key]["label"]; 
      } 
     } 
    } 
} 
0

如果我沒有得到你的一點錯誤比這將幫助你: -

function searchLabel($inputs,$search) 
    foreach($inputs as $input){ 
     if($input['id']==$search){ 
     return $input['label']; 
     } 
    } 
    $label = searchLabel($inputs,12.1);