2

私は次の配列を持っています:

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

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

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

これを行わずに、type値がであるものが 1 つ以上存在するかどうかを知る必要があります。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、配列を -ing し、文字列検索関数を使用してみてください。

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

それは短く、機敏で、単純な文字列キーペアの仕事を成し遂げます。

于 2012-09-16T00:26:31.190 に答える
0

すべての異なる値をカウントする必要がある場合に便利な別の簡単な方法があります

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

「バー」の数を取得するには (または別の値のカウントを取得するには):

echo($cnt['bar']);
于 2014-04-25T13:52:10.450 に答える
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 に答える