我需要验证一个值是否在数组中,并且我正在使用php函数in_array()
。我注意到,当我发送给in_array()
函数的数组由子数组组成时,它不起作用。
无论如何都要对子阵列进行此验证吗?
为了帮助您理解我的问题,我有以下代码:
$userIds = array();
foreach($accounts as $account){
$accounIds[] = $account->getId();
$userIds[] = AccountUserBeanHome::findAllIdsByAccountId($account->getId());
}
$userId = 225;
if (in_array($userId, $userIds, true)) {
do action...
}
问题是数组$ userIds可能是这样的:
Array
(
[0] => Array
(
[0] => 225
[1] => 226
[2] => 227
[3] => 228
[4] => 229
[5] => 230
[6] => 340
[7] => 355
)
[1] => Array
(
[0] => 313
[1] => 314
[2] => 315
[3] => 316
[4] => 318
[5] => 319
)
[2] => Array
(
[0] => 298
[1] => 301
[2] => 302
[3] => 338
)
)
我注意到in_array()
无法检查子数组,所以我希望您帮助进行此验证...也许是一种让所有子数组元素成为主数组的所有元素的方法......好吧..我希望你能帮助我。
答案 0 :(得分:12)
你需要的是一个递归的in_array。 幸运的是,很多人已经做到了这一点。
这个直接来自PHP手册评论部分:http://www.php.net/manual/en/function.in-array.php#84602
<?php
function in_array_recursive($needle, $haystack) {
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($haystack));
foreach($it AS $element) {
if($element == $needle) {
return true;
}
}
return false;
}
?>
答案 1 :(得分:2)
$iterator = new RecursiveIteratorIterator(
new RecursiveArrayIterator($userIds),
RecursiveIteratorIterator::SELF_FIRST);
foreach($iterator as $key => $val) {
if($val == $userId) {
// do something
}
}
的文档
Kudo到gordon
答案 2 :(得分:1)
您可以使用$userIds
展平array_merge()
数组:
$userIds[] = array();
foreach($accounts as $account){
$accounIds[] = $account->getId();
$userIds = array_merge($userIds, AccountUserBeanHome::findAllIdsByAccountId($account->getId()));
}
然后致电in_array()
检查您的身份。