簡體   English   中英

檢查值是否存在於多維數組中

[英]Check if value if present in multidimensional array

我正在研究一種檢查數組是否包含值的方法,如果不運行,則不要運行內部代碼。 如下例所示,有幾種語言,但是在這種情況下不存在“ en”語言,因此如果當前翻譯為“ en”並且數組中不存在“ en”語言,則不要運行第二個foreach 。 使用in_array似乎不起作用,如果有一個函數可以檢查數組的子代中是否存在valeu?

數組

$arr =array(
    [16] => Array
        (
            [0] => Array
                (
                    [language] => de
                    [translation] => blog/beer
                )

            [2] => Array
                (
                    [language] => es
                    [translation] => 
                )

            [3] => Array
                (
                    [language] => fr
                    [translation] => blog/paris-big-city
                )

            [4] => Array
                (
                    [language] => it
                    [translation] => blog/it-slug
                )

            [5] => Array
                (
                    [language] => nl
                    [translation] => blog/nederlands-slug
                )

        )

        [...]//more
)

循環

foreach($arr as $items){

    //we need to check if current language is present
    if( in_array('en' , $items) ){
        foreach($items as $item){

         // run code when certain language is present

        }
    }

}

您可以使用array_walk_recursive。 它將函數遞歸地應用於數組和子數組。

文檔和示例:

public function testArray()
{
    $arr = [
        16 => [
            1 => [
                'language'    => 'de',
                'translation' => 'blog/beer',
            ],
            2 => [
                'language'    => 'en',
                'translation' => 'url/url',
            ],
        ]
    ];

    $match = 'en';
    array_walk_recursive($arr, function ($key, $value) use ($match) {
        if ($key === $match) {
            // run code when certain language is present
            print "Gotcha \n";
            print $key . "\n";
            print $value . "\n";
        }
    });
}

上面的示例將輸出:

Gotcha 
en
language

您可以使用array_column使in_array正常工作。

$lang = array_column($arr, "language");
foreach($arr as $items){

    if( in_array('en', $lang) ){
        foreach($items as $item){

         // run code when certain language is present

        }
    }

}

Array_column在一個單獨的數組中捕獲所有語言,以便in_array可以按預期在一個維數組中查找。
多維數組不適用於in_array。

編輯,放錯位置的array_column。

這是一種使用array_walk_recursive和一個布爾標志來確定某個字符串是否作為未確定的嵌套和深度的數組中的值的方法。

該解決方案簡單,易於閱讀,並且最重要的是很好地擴展,因為該數組具有多少嵌套級別無關緊要。

$arr = [
  16 => [
      1 => [
          'language' => 'de',
          'translation' => 'blog/beer',
      ],
      2 => [
          'language' => 'en',
          'translation' => 'url/url',
      ],
  ]
];

$languageExists = false;
$match = 'en';
array_walk_recursive($arr, function ($key, $value) use (&$languageExists, $match) {
   if($key === $match) {
       $languageExists = true;
   }
});

foreach($arr as $items){
    //we need to check if current language is present
    if($languageExists) {
        foreach($items as $item){
            // run code when certain language is present
        }
    }
}

暫無
暫無

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

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