簡體   English   中英

檢查多維數組中的鍵值對

[英]Check for key-value pair in multidimensional array

我有以下數組:

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
    }
}

(僅用於學習目的)

我會選擇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!';

}

使用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 );

老實說,一個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()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'的數量(或獲取另一個值的計數):

echo($cnt['bar']);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM