我有一个数组,我想在其中搜索uid并获得数组的键。
例子
假设我们有以下二维数组:
$userdb = array(
array(
'uid' => '100',
'name' => 'Sandra Shush',
'pic_square' => 'urlof100'
),
array(
'uid' => '5465',
'name' => 'Stefanie Mcmohn',
'pic_square' => 'urlof100'
),
array(
'uid' => '40489',
'name' => 'Michael',
'pic_square' => 'urlof40489'
)
);
函数调用search_by_uid(100)(第一个用户的uid)应该返回0。
函数调用search_by_uid(40489)应该返回2。
我试着做循环,但我想要一个更快的执行代码。
你可以使用这个函数;
https://github.com/serhatozles/ArrayAdvancedSearch
<?php
include('ArraySearch.php');
$query = "a='Example World' and b>='2'";
$Array = array(
'a' => array('d' => '2'),
array('a' => 'Example World','b' => '2'),
array('c' => '3'), array('d' => '4'),
);
$Result = ArraySearch($Array,$query,1);
echo '<pre>';
print_r($Result);
echo '</pre>';
// Output:
// Array
// (
// [0] => Array
// (
// [a] => Example World
// [b] => 2
// )
//
// )
扩展@mayhem创建的函数,这个例子将更多的是一个“模糊”搜索,如果你只是想匹配搜索字符串的一部分(大部分):
function searchArrayKeyVal($sKey, $id, $array) {
foreach ($array as $key => $val) {
if (strpos(strtolower($val[$sKey]), strtolower(trim($id))) !== false) {
return $key;
}
}
return false;
}
例如,数组中的值是Welcome to New York!而你只想要第一个“纽约”
还没有人使用过array_reduce,所以我想添加这个方法…
$find_by_uid = '100';
$is_in_array = array_reduce($userdb, function($carry, $user) use ($find_by_uid){
return $carry ? $carry : $user['uid'] === $find_by_uid;
});
// Returns true
与array_search()相比,可以更好地控制'search'逻辑。
注意,我在这里使用了严格的等式,但您可以选择不同的比较逻辑。$carry意味着比较需要为真一次,最终结果将为真。
我修改了下面的一个例子,描述函数array_search。函数searchItemsByKey返回多维数组(N层)中通过$key返回的所有值。也许,它会对某人有用。例子:
$arr = array(
'XXX'=>array(
'YYY'=> array(
'AAA'=> array(
'keyN' =>'value1'
)
),
'ZZZ'=> array(
'BBB'=> array(
'keyN' => 'value2'
)
)
//.....
)
);
$result = searchItemsByKey($arr,'keyN');
print '<pre>';
print_r($result);
print '<pre>';
// OUTPUT
Array
(
[0] => value1
[1] => value2
)
函数代码:
function searchItemsByKey($array, $key)
{
$results = array();
if (is_array($array))
{
if (isset($array[$key]) && key($array)==$key)
$results[] = $array[$key];
foreach ($array as $sub_array)
$results = array_merge($results, searchItemsByKey($sub_array, $key));
}
return $results;
}