我的数组看起来像这样:
$arr = Array();
$arr[] = Array("foo", "bar");
$arr[] = Array("test", "hello");
现在我想检查$arr
是否包含一个数组,该数组在第一个位置包含foo
。
是否有此功能的函数,还是应该循环$arr
并搜索其中每个数组?
我的数组看起来像这样:
$arr = Array();
$arr[] = Array("foo", "bar");
$arr[] = Array("test", "hello");
现在我想检查$arr
是否包含一个数组,该数组在第一个位置包含foo
。
是否有此功能的函数,还是应该循环$arr
并搜索其中每个数组?
一个很巧妙的方法是使用 array_reduce
- 通过传入一个函数,如果找到了 foo
值则将值加 1,否则加 0 来计算总和:
$foo_found = array_reduce(
$arr,
function ($num_of_hits, $item, $search_for = 'foo') {
$num_of_hits += $item[0] === $search_for ? 1 : 0;
return $num_of_hits;
}
);
$xyz_found = array_reduce(
$arr,
function ($num_of_hits, $item, $search_for = 'xyz') {
$num_of_hits += $item[0] === $search_for ? 1 : 0;
return $num_of_hits;
}
);
var_dump($foo_found, $xyz_found);
返回1和0,因为foo
出现了一次,而xyz
没有出现。
你的数组:
$arr = Array();
$arr[] = Array("foo", "bar");
$arr[] = Array("foo", "hello");
我的解决方案:
echo search_in_array("foo",$arr); // This will show you the number of items found
function search_in_array($value, $arr){
$num = 0;
for ($i = 0; $i < count($arr); ) {
if($arr[$i][0] == $value) {
$num++;
}
$i++;
}
return $num ;
}
我认为有几种不同的方法可以做到这一点。请查看以下内容
$arr_zero = Array();
$arr_zero[] = Array("foo", "bar");
$arr_zero[] = Array("test", "hello");
$arr_zero[] = Array("nal", "rob");
$array_one = array_shift(array_values($arr_zero));
$element = array_shift(array_values($array_one));
if($element=='foo');
echo "its ok";
或者
$arr_zero = Array();
$arr_zero[] = Array("foo", "bar");
$arr_zero[] = Array("test", "hello");
$array_one = array_shift(array_values($arr_zero));
$element = reset($array_one); // First Element's Value
if($element=='foo');
echo "its ok";
或者
$arr_zero = Array();
$arr_zero[] = Array("foo", "bar");
$arr_one = $arr_zero[key($arr_zero)];
echo $arr_one[key($arr_one)];
$arr_zero = Array();
$arr_zero[] = Array("foo", "bar");
$arr_zero[] = Array("test", "hello");
$array_one = array_shift(array_values($arr_zero));
echo key($array_one); // First Element's Key
array_walk
(http://php.net/manual/en/function.array-walk.php),虽然它也是一个循环。 - Zathrus Writerarray_walk_recursive
。 - MDEV