如何在多维数组中搜索同一级别的值?

时间:2012-10-30 09:48:32

标签: php arrays search multidimensional-array

我有一个大的多维数组,我需要在其中搜索某个值并检索一个兄弟值。

如果我搜索29的值,我需要确保它属于id的键。找到后,我需要label键的值。这两个键都属于同一个嵌套数组。

例如:

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

在此示例中,我搜索属于id的29,返回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

提前致谢

3 个答案:

答案 0 :(得分: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"];
            }
         }
   }
}

答案 1 :(得分: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)

答案 2 :(得分:0)

如果我的意思不对,那么这对你有帮助: -

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