PHP多维数组二维数组查找、搜索、判断
- 发表于
- PHP
PHP多维数组查找指定值
PHP多维数组中是否存在某一值Value
,写foreach
针对特定场景耗时耗内存,探讨最优方案。
<?php
$records = array(
array(
'id' => 2135,
'first_name' => 'John',
'last_name' => 'Doe',
'meta' => array (
'registered_on' => '1/1/2019',
'more_meta' => array(
'registered_on' => 'i am 3 levels deep',
)
)
),
array(
'id' => 3245,
'first_name' => 'Sally',
'last_name' => 'Smith',
'meta' => array (
'registered_on' => '6/1/2019'
)
),
array(
'id' => 5342,
'first_name' => 'Jane',
'last_name' => 'Jones',
'meta' => array (
'registered_on' => '12/1/2019'
)
),
array(
'id' => 5623,
'first_name' => 'Peter',
'last_name' => 'Doe',
'meta' => array (
'registered_on' => '1/1/2020'
)
)
);
//多维数组查找
function array_column_recursive(array $haystack, $needle) {
$found = [];
array_walk_recursive($haystack, function($value, $key) use (&$found, $needle) {
if ($key == $needle)
$found[] = $value;
});
return $found;
}
$registeredOnArray = array_column_recursive($records, 'registered_on');
var_export($registeredOnArray);
/*
输出结果
array (
0 => '1/1/2019',
1 => 'i am 3 levels deep',
2 => '6/1/2019',
3 => '12/1/2019',
4 => '1/1/2020',
)
*/
?>
或方法
自定义函数
下面的递归方法来检查多维数组中是否存在某一值。
function deep_in_array($value, $array) {
foreach($array as $item) {
if(!is_array($item)) {
if ($item == $value) {
return true;
} else {
continue;
}
}
if(in_array($value, $item)) {
return true;
} else if(deep_in_array($value, $item)) {
return true;
}
}
return false;
}
PHP二维数组查找指定值
利用array_search
与array_column
实现二维数组查找,不用自己写个循环,减少工作量。
<?php
$userdb = array(
0 => array(
'uid' => 100,
'name' => 'Sandra Shush',
'url' => 'urlof100'
),
1 => array(
'uid' => 5465,
'name' => 'Stefanie Mcmohn',
'pic_square' => 'urlof100'
),
2 => Array(
'uid' => 40489,
'name' => 'Michael',
'pic_square' => 'urlof40489'
)
);
$found_key = array_search(40489, array_column($userdb, 'uid'));
/**
如果$userdb很大,建议使用一个变量,避免搜索每个元素时都调用array_column()
$uid = array_column($userdb, 'uid');
$found_key = array_search(40489, $uid);
*/
var_dump($found_key);
重复值过滤
上面的函数和第二个解决方法会有问题,就是仅仅返回了第一个匹配的键。如果在数组中有重复的值,而 uid
列也不唯一,要把所有的匹配结果都返回,该怎么做呢?PHP提供了这样的功能,只需改用 array_keys
函数即可:
$keys = array_keys(array_column($userdb, 'uid'), 40489);
返回对值
上面返回的是数组对应的键,那如果想要键和值一并关联返回,一行代码能搞定吗?可以的,修改一下就行了,使用 array_combine
函数将键和值组装起来返回:
$keys = array_keys(array_combine(array_keys($userdb), array_column($userdb, 'uid')),40489);
上面是使用函数完成,当然你也可以自己写个函数
/**
* 判断字符串是否在数组中,包括二维数组--这里只能判断二维数组
* @param $str
* @param $arr
* @return bool
*/
public function array_multi_search($str,$arr){
if(in_array($str,$arr)){
return true;
}
foreach ($arr as $row){
if($this->array_multi_search($str,$row)){
return true;
}
}
return false;
}
也能这样
if(in_array(100, array_column($userdb, 'uid'))) {
echo "FOUND";
}
array_column()
返回输入数组中某个单一列的值.
array_column($userdb, 'uid')
它将返回如下数组:
Array
(
[0] => 100
[1] => 5465
[2] => 40489
)
然后我们使用in_array()
函数检查一维数组中是否存在值"100"。
原文连接:PHP多维数组二维数组查找、搜索、判断
所有媒体,可在保留署名、
原文连接
的情况下转载,若非则不得使用我方内容。