【问题标题】:Find specific value in multidimensional array在多维数组中查找特定值
【发布时间】:2019-10-28 00:16:15
【问题描述】:

我正在尝试在多维数组中搜索数字一 [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
     )
 );

?>

【问题讨论】:

  • 您需要实现递归搜索。可能类似于stackoverflow.com/q/28472779/296555
  • 您可以使用 is_array 检查是否存在子数组,如果一层深度足够,则调整您的查找。但您也可以按照已经提出的递归方式执行此操作。

标签: php arrays multidimensional-array


【解决方案1】:

您可以将 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 检查了它是否存在于数组中。

Demo.

【讨论】:

  • 但是如果你只想搜索一个多维数组呢?
  • 这个解决方案不考虑一维数组
  • 您仍然可以从 sn-p 中删除 ...$array2...$array3
  • 对于 1d,in_array 就足够了。根本不需要我的代码。
  • @Drakula 为了澄清我正在寻找如何在一个二维数组中搜索。您的答案显示了如何在许多 2D 数组中搜索以及如何在一个 1D 数组中搜索。我认为您的回答达到了目的,并且无论如何涵盖了范围。我会继续批准。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    相关资源
    最近更新 更多