Php 检查多维数组中的键值对
我有以下数组:Php 检查多维数组中的键值对,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有以下数组: Array ( [0] => Array ( [type] => foo ) [1] => Array ( [type] => bar ) [2] => Array ( [type] => bar ) ) 并且需要知道是否存在一个或多个类型哪个值是条
Array
(
[0] => Array
(
[type] => foo
)
[1] => Array
(
[type] => bar
)
[2] => Array
(
[type] => bar
)
)
并且需要知道是否存在一个或多个类型
哪个值是条
,如果不这样做:
foreach ($arrayOfTypes as $type) {
if ($type['type'] == 'bar')
{
// Stuff here
}
}
(仅用于学习目的)在数组中使用:
将其与数组_映射相结合,以展平您所拥有的内容。像这样:
$new_array = array_map( function( $arr ) {
return $arr['type'];
}, $array );
in_array( 'bar', $new_array );
我会和你一起去
老实说,
foreach
loop或moonwave99的array filter
答案可能是你最好的选择,但是如果你所寻找的是最短的代码,并且是最有创意的,这会让大多数程序员感到厌烦,那么你可以尝试序列化数组并使用字符串搜索功能:
serialize(array(
0=>array(
'type' => 'foo'
),
1=>array(
'type' => 'bar'
),
2=>array(
'type' => 'bar'
)
))
变成
a:3:{i:0;a:1:{s:4:"type";s:3:"foo";}i:1;a:1:{s:4:"type";s:3:"bar";}i:2;a:1:{s:4:"type";s:3:"bar";}}
因此,您现在可以运行strpos()
或preg_match()
函数来查找它们。所以您的整个函数看起来像:
$exists = strpos('{s:4:"type";s:3:"bar";}',serialize($arrayOfTypes)); //returns number or false
它很短,很快就完成了简单字符串键对的工作。这与moonwave99的解决方案基本相同,但更有用,因为它在一个函数中也可以提供键/值对,因此它可以用于搜索任何键/值组合:
function isKVInArray($k, $v, $array) {
$filtered = array_filter($array, function($item) use($k,$v) {
return $item[$k] == $v;
});
if(count($filtered)>=1) return true;
else return false;
}
$k = 'live';
$v = 'y';
$my_array = array(
0=>array(
'live'=>'n',
'something_else'=>'a'
),
1=>array(
'live'=>'y',
'something_else'=>'b'
),
2=>array(
'live'=>'n',
'something_else'=>'c'
)
);
if(isKVInArray($k, $v, $my_array)) echo "$k=>$v was found in the array.";
else echo 'No luck sorry!';
当您需要计算所有不同的值时,还有另一种简单的方法非常有用
foreach ($arrayOfTypes as $type) $cnt[$type['type']]++;
要获取“bar”的数量(或获取另一个值的计数):
foreach ($arrayOfTypes as $type) $cnt[$type['type']]++;
echo($cnt['bar']);