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