搜索多维数组中的列-值

时间:2018-09-26 11:49:45

标签: php arrays

Array
(
  [0] => Array
    (
      [abc] => Array
        (
          [0] => Array
            (
              [a] => 35
              [b] => c
              [d] => 43
            )
           [1] => Array
            (
              [e] => 45
              [f] => 50
              [g] => 28
            )
        )
      [hij] => Array
        (
          [0] => Array
           (
             [n] => 35
             [o] => 37
             [p] => 43
           )
          [1] => Array
           (
            [q] => 45
            [r] => 50
            [s] => 2800
           )
         )
       )
 [1] => Array
   (
     [efg] => Array
      (
         [0] => Array
           (
            [h] => 35
            [i] => 37
            [j] => 43
           )
         [1] => Array
           (
            [k] => 45
            [l] => 50
            [m] => 2800
           )
        )
     [klm] => Array
        (
          [0] => Array
            (
              [t] => 35
              [u] => 37
              [v] => 43
            )
          [1] => Array
            (
              [w] => 45
              [x] => 50
              [y] => 10000
            )
          )
        ) 
    )

我正在尝试搜索特定的列,然后搜索多维数组中的值。例如列“ y”-值-10000。我在数组array_search中进行了尝试,但发现它只能通过第一个数组层查看

这有效

in_array(10000, array_column($arr[1]["klm"], 'y') 

我想要实现的是能够从外部进行搜索

if(in_array(10000, array_column($arr, 'y'))) {
echo "FOUND";
}   

如果可能,希望避免很多循环

根据需要添加数组

            $arr = array();
            $a1[0] = array("a"=>"35", "b"=>"c", "d"=>"43");
            $a1[1] = array("e"=>"45", "f"=>"50", "g"=>"28");
            $a2[0] = array("h"=>"35", "i"=>"37", "j"=>"43");
            $a2[1] = array("k"=>"45", "l"=>"50", "m"=>"2800");
            $x1[0] = array("n"=>"35", "o"=>"37", "p"=>"43");
            $x1[1] = array("q"=>"45", "r"=>"50", "s"=>"2800");
            $x2[0] = array("t"=>"35", "u"=>"37", "v"=>"43");
            $x2[1] = array("w"=>"45", "x"=>"50", "y"=>"10000");
            $arr[0] = array("abc"=>$a1,"hij"=>$x1);
            $arr[1] = array("efg"=>$a2,"klm"=>$x2);

2 个答案:

答案 0 :(得分:1)

您可以使用递归查找功能在数组中搜索给定值,例如:

function findValueRecursive($array, $search)
{
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            if (findValueRecursive($value, $search)) {
                return true;
            }
        } elseif ($value == $search) {
            return true;
        }
    }
    return false;
}

var_dump(findValueRecursive($arr, 10000)); // true
var_dump(findValueRecursive($arr, 10001)); // false

答案 1 :(得分:1)

如果要在整个数组中搜索一个值,则可以创建递归函数,如下所示:

function recInArr($arr, $value) {
    if (!is_array($arr))
        return ($arr == $value);
    foreach($arr as $elem)
        if (recInArr($elem, $value))
                return true;
    return false;
}

通过这种方式,您可以调用recInArr($arr, 1000)来查找您的值是否存在

如果您需要查找仅在特定列上找到的值,则可以对此进行修改:

function recInArr($arr, $col, $value) {
    foreach($arr as $key => $val) {
        if (!is_array($val)) {
             if ($key == $col && $val == $value)
                return true;
        } else
            if (recInArr($val, $col, $value))
                return true;
    }
    return false;
}

现在致电recInArr($arr, "y", 10000)