在多维数组中查找特定值

时间:2019-06-13 11:52:01

标签: php arrays multidimensional-array

我正在尝试在多维数组中搜索数字[1]。确实可以使用标准数组[$ array_1]来工作,但是当存在嵌入式数组[$ array_2]和[$ array_3]时不起作用。

在脚本的最后,您可以找到我尝试过的内容。

想要的行为:

搜索以返回指示是否找到该值的值。 可以使用索引位置,也可以返回找到的数字的位数或重复的数字。

我的计划是将结果移动到变量中,并检查结果是否为null。如果为null,则表示未找到任何搜索结果。我使用null是因为零[0]可以指向索引位置。

<pre>

<?php

$search_for_value = 1;

/**
 * ---------------------------------
 * Array.
 * ---------------------------------
 */

$array_1 = [3, 2, 1];

/**
 * ---------------------------------
 * Multidimensional arrays.
 * ---------------------------------
 */

/**
  *  Value 1 is exists in the array.
 */

$array_2 = [
        [2],
        [1]
];


echo ("-- array_2 ---\n\n");
print_r($array_2);

/**
 *  Value 1 is missing in the array.
 */

$array_3 = [
        [4],
        [5]
];

echo ("-- array_3 ---\n\n");
print_r($array_3);


/**
 * Functions
 */
 function find_value($search_for_value, $array_selected) {
     return(array_search($search_for_value, $array_selected));
 };


 /**
  * ---------------------------------
  * Searches
  * ---------------------------------
  */

 // Search for value in array_1

$array_selected = $array_1;

 print_r(
     find_value(
         $search_for_value, $array_selected
     )
 );

 // Search for value in array_2

 $array_selected = $array_2;

 print_r(                                               # <==== Not working.
     find_value(
         $search_for_value, $array_selected
     )
 );

?>

2 个答案:

答案 0 :(得分:2)

您可以将splat运算符与in_array一起使用,
下面是多维数组

$temp = array_merge(...$array_2);
var_dump(in_array(2, $temp));
$temp = array_merge(...$array_3);
var_dump(in_array(2, $temp));

对于一维数组,

您可以直接检查in_array($value_to_search, $array_1);

我正在将数组暴露于它们的值水平,以便它们变平整。
现在,我刚刚使用in_array检查了它是否存在于数组中。

Demo

答案 1 :(得分:0)

这是一个递归函数,该函数返回一个布尔值,指示是否找到该值。此功能的大部分来自Recursive array_search

/**
 * Returns a boolean indicating if the needle is found in the haystack.
 * @param $needle
 * @param $haystack
 * @return bool
 */
function find_value($needle, $haystack)
{
    foreach ($haystack as $key => $value) {

        if ($needle === $value || (is_array($value) && find_value($needle, $value) !== false)) {
            return true;
        }
    }

    return false;
}