[英]in array for multidimensional array in php
我的第一个数组是针:
$needle = Array
(
[2] => authenticated user
[3] => administrator
[13] => first keyword
[23] => second keyword
[33] => third keyword
)
该针应匹配的第二个数组是多维数组:-
$hay = Array
(
[0] => Array
(
[value] => first keyword
)
[1] => Array
(
[value] => second keyword
)
[2] => Array
(
[value] => tenth keyword
)
)
我希望,如果needle
阵列与hay
阵列匹配,我应该会成真。
我尝试使用此方法,但不起作用:-
if (in_array(strtolower($hay), $needle)) {
...
}
谢谢。
$needle = array
(
2 => 'authenticated user',
3 => 'administrator',
13 => 'first keyword',
23 => 'second keyword',
33 => 'third keyword'
);
$hay = array
(
0 => array
(
'value' => 'first keyword'
),
1 => array
(
'value' => 'second keyword'
),
2 => array
(
'value' => 'tenth keyword'
)
);
function check_array($array1, $array2){
$result = array();
foreach($array1 as $key => $val) {
if(isset($array2[$key])){
if(is_array($val) && $array2[$key]){
$result[$key] = check_array($val, $array2[$key]);
}
} else {
$result[$key] = $val;
}
}
return $result;
}
if (check_array($hay, $needle)) {
print_r($result);
}
不幸的是,PHP不允许在多维数组上使用in_array函数。 您需要编写自己的函数in_array_multi,该函数会遍历所有维度中数组的所有成员。
<?php
function in_array_multi($needle, $hay, $strict = FALSE) {
if (is_array($hay)) {
foreach ($hay as $hay2) {
$result = FALSE;
if (
is_array($hay2)
) {
if ($result = in_array_multi($needle, $hay2, $strict)) {
return $result;
} else {
continue;
}
} else if (is_array($needle)) {
if ($result = in_array_multi($hay2, $needle, $strict)) {
return $result;
} else {
continue;
}
} else if ($strict && $hay2 === $needle) {
return TRUE;
} else if (!$strict && $hay2 == $needle) {
return TRUE;
}
}
}
return FALSE;
}
$needle = Array
(
2 => "authenticated user",
3 => "administrator",
13 => "first keyword",
23 => "second keyword",
33 => "third keyword"
);
// Second array where this needle should be matched is a multi-dimensional array:-
$hay = Array
(
0 => Array
(
"first keyword"
),
1 => Array
(
"second keyword"
),
2 => Array
(
"tenth keyword"
),
);
$lowerNeedle = array();
foreach ($needle as $k => $v) {
$lowerNeedle[] = strtolower($v);
}
if (in_array_multi($lowerNeedle, $hay) !== FALSE) {
echo "The needle '" . implode(",", $needle) . "' has been found.";
} else {
echo "Needle has not been found.";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.