多维数组中的PHP搜索

多维数组中的PHP搜索,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我的大脑很痛,请告诉我。我有以下情况: 我有下一个多维数组: $numbers = array ( "one_digit" => array (1,2,3,4,5), "two_digits" => array (20,21,22,23,24,25), "three_digits" => array (301,302,303,304,304), "mixed_digits" => array (9,29,309,1) ); 我需要一种

我的大脑很痛,请告诉我。我有以下情况:

  • 我有下一个多维数组:

    $numbers = array (
        "one_digit" => array (1,2,3,4,5),
        "two_digits" => array (20,21,22,23,24,25),
        "three_digits" => array (301,302,303,304,304),
        "mixed_digits" => array (9,29,309,1)
    );
    
  • 我需要一种在$numbers数组中搜索以下内容的方法:

    --搜索数字20是否在任何$numbers数组中,并在找到它的位置回显 例如,$find1=m_数组_搜索(“20”,$number);echo“我已在“..$find1.”$numbers子数组中找到搜索值”; 结果:“我在$numbers的两位子数组中找到了搜索值”

    --搜索数字1是否在任何$numbers数组中,并在找到它的位置回显 例如,$find2=m_数组_搜索(“1”,$number);echo“我已在“..$find2.”$numbers子数组中找到搜索值”; 结果:“我在$number的两个\u数字、混合\u数字子数组中找到了搜索值”

因此,该函数必须能够在一个或多个“子阵列”中发现存在。对不起,如果我弄错了“子阵列”这个词


谢谢你

检查一下,如果有帮助,请告诉我

<?php
function array_find_deep($array, $search, $keys = array())
{
    foreach($array as $key => $value) {
        if (is_array($value)) {
            $sub = array_find_deep($value, $search, array_merge($keys, array($key)));
            if (count($sub)) {
                return $sub;
            }
        } elseif ($value === $search) {
            return array_merge($keys, array($key));
        }
    }

    return array();
}


$numbers = array (
    "one_digit" => array (1,2,3,4,5), 
    "two_digits" => array (20,21,22,23,24,25),
    "three_digits" => array (301,302,303,304,304),
    "mixed_digits" => array (9,29,309,1)
);

var_dump(array_find_deep($numbers, 20));

var_dump(array_find_deep($numbers, 1));

var_dump(array_find_deep($numbers, 301));

var_dump(array_find_deep($numbers, 309));

?>


您可以将结果存储在变量中,如
$result=array\u find\u deep($numbers,20)
并尝试
echo$result[0]
这将给出它在哪个数组中找到值的结果。

使用
in_array
函数的简单解决方案:

$search = 1;
$keys = [];
foreach ($numbers as $k => $v) {
    if (is_array($v) && in_array($search, $v)) $keys[] = $k;
}

echo "I've found the searched value in ". implode(', ', $keys) ." subarray". ((count($keys) > 1)? "s":"") ." of \$numbers";
输出:

I've found the searched value in one_digit, mixed_digits subarrays of $numbers
你可以在一个循环中尝试这个-

$numbers = array (
    "one_digit" => array (1,2,3,4,5),
    "two_digits" => array (20,21,22,23,24,25),
    "three_digits" => array (301,302,303,304,304),
    "mixed_digits" => array (9,29,309,1)
);

function search_value($array, $value)
{
  $result = array();
  foreach($array as $key => $sub) {
    // check if element present in sub array
    if(array_search($value, $sub) !== false) {
      // store the key
      $result[] = $key;
    }
  }
  return $result;
}

var_dump(search_value($numbers, 1));
var_dump(search_value($numbers, 5));
输出

array(2) {
  [0]=>
  string(9) "one_digit"
  [1]=>
  string(12) "mixed_digits"
}
array(1) {
  [0]=>
  string(9) "one_digit"
}

@BogdanWebb这是页面上的最佳答案(您可以省略
is\u array()
check;我会的)<当您只希望每个子阵列检查的结果为真/假时,code>array\u search()就太过分了。你可能想重新考虑一下。