繁体   English   中英

在多维数组中查找特定值

[英]Find specific value in multidimensional array

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

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

想要的行为:

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

我的计划是将结果移动到变量中,并检查结果是否为空。 如果为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
     )
 );

?>

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

$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检查它是否存在于数组中。

演示

这是一个递归函数,它返回一个布尔值,指示是否找到该值。 此函数的大部分来自递归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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM