[英]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.