2

我有以下数组:

Array
(
    [0] => Array
        (
            [type] => foo
        )

    [1] => Array
        (
            [type] => bar
        )

    [2] => Array
        (
            [type] => bar
        )
)

并且需要知道是否存在一个或多个type哪个值是bar,而不这样做:

foreach ($arrayOfTypes as $type) {
    if ($type['type'] == 'bar')
    {
        // Stuff here
    }
}

(仅用于学习目的)

4

5 回答 5

4

我会去array_filter()

$filteredArray = array_filter($stuff, function($item){

    return $item['type'] == 'bar';

});

if( count($filteredArray) > 0 ){

    echo 'There was a bar item in array.';

}else{

    echo 'No luck sorry!';

}
于 2012-09-16T00:17:27.863 回答
1

使用 in_array:http ://se.php.net/manual/en/function.in-array.php

将它与 array_map 结合使用以展平你所拥有的。像这样:

$new_array = array_map( function( $arr ) {
    return $arr['type'];
}, $array );
in_array( 'bar', $new_array );
于 2012-09-16T00:03:18.510 回答
1

老实说,foreach循环或moonwave99 的array-filter答案可能是您最好的选择,但如果您正在寻找的可能是最短的代码和让大多数程序员作呕的创造力,您可以尝试serialize使用数组并使用字符串搜索功能:

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()orpreg_match()函数来找到它们。所以你的整个功能看起来像

$exists = strpos('{s:4:"type";s:3:"bar";}',serialize($arrayOfTypes)); //returns number or false

它很短,很灵巧,可以完成简单的字符串密钥对的工作。

于 2012-09-16T00:26:31.190 回答
0

这与 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!';
于 2013-09-30T14:57:04.803 回答
0

当您需要计算所有不同的值时,还有另一种简单的方法很有用

foreach ($arrayOfTypes as $type) $cnt[$type['type']]++;

获取“bar”的数量(或获取另一个值的计数):

echo($cnt['bar']);
于 2014-04-25T13:52:10.450 回答