我正在尝试使用递归multidimensional array
函数在in_array
中找到值,但我总是得到not found
。
这是array $v
:
Array
(
[0] => Array
(
[EV000005] => Array
(
[0] => Array
(
[0] => Array
(
[0] => EN
[1] => Thread holding
)
[1] => Array
(
[0] => nl-NL
[1] => Schroefdraadhouder
)
)
)
)
这是功能:
public function in_array_r($needle, $haystack, $strict = false) {
foreach ($haystack as $item) {
if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && $this->in_array_r($needle, $item, $strict))) {
return true;
}
}
return false;
}
这就是我称之为函数的函数not found
而不是found
:
echo $this->in_array_r("EV000005", $v) ? 'found' : 'not found';
我也尝试使用$strict = true
但结果相同。
为什么在这种情况下搜索EV000005
不成功?
答案 0 :(得分:1)
来自link的参考。
您正在递归搜索值,但在示例中,您尝试按键搜索。
您可以使用此功能来实现此目的,
function array_key_exists_custom($needle, $haystack)
{
$result = array_key_exists($needle, $haystack);
if ($result) {
return $result;
}
foreach ($haystack as $v) {
if (is_array($v)) {
$result = array_key_exists_custom($needle, $v);
}
if ($result) {
return $result;
}
}
return $result;
}
以下是demo。
根据要求,这是面向对象的工作demo。
这是你的代码:
<?php
//Enter your code here, enjoy!
class A
{
public function array_key_exists_custom($needle, $haystack)
{
$result = array_key_exists($needle, $haystack);
if ($result) {
return $result;
}
foreach ($haystack as $v) {
if (is_array($v)) {
$result = $this->array_key_exists_custom($needle, $v);
}
if ($result) {
return $result;
}
}
return $result;
}
public function getData()
{
$arr = array
(
"0" => array
(
"EV000005" => array
(
"0" => array
(
"0" => array
(
"0" => "EN",
"1" => "Thread holding",
),
"1" => array
(
"0" => "nl-NL",
"1" => "Schroefdraadhouder",
),
),
),
),
);
$temp = $this->array_key_exists_custom("EV000005", $arr);
echo ($temp ? "found" : "not found");
}
}
$obj = new A;
$obj->getData();
?>
答案 1 :(得分:0)
试试这个,你的数组应该是:
Array
(
[0] => Array
(
["EV000005"] => Array
(
[0] => Array
(
[0] => Array
(
[0] => "EN"
[1] => "Thread holding"
)
[1] => Array
(
[0] => "nl-NL"
[1] => "Schroefdraadhouder"
)
)
)
)
)
答案 2 :(得分:0)
in_array_r搜索值,但您正在查找密钥。 试试this gist