检查多维数组中是否存在值

时间:2018-01-30 13:33:52

标签: php arrays foreach

我正在研究一种检查数组是否包含值的方法,如果不是,则不运行内部代码。如下例所示,有几种语言,但在这种情况下,'en'语言不存在,所以如果当前的翻译是'en'并且'en'语言不存在于数组中,则不要运行第二个foreach语言。使用in_array似乎不起作用,如果有一个函数来检查valeu是否存在于数组的childeren中?

数组

$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

        }
    }

}

3 个答案:

答案 0 :(得分:0)

您可以使用array_walk_recursive。它将递归地应用于数组和子数组。

Doc和示例:

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

答案 1 :(得分:0)

这是一种使用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
        }
    }
}

答案 2 :(得分:-1)

您可以使用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。

相关问题