Проверьте, является ли значение пустым для ключа в многомерном массиве - PullRequest
0 голосов
/ 16 мая 2018

Мне нужно простое и элегантное решение, чтобы проверить, имеет ли ключ пустое значение в многомерном массиве. Должен вернуть true / false.

Вот так, но для многомерного массива:

if (empty($multi_array["key_inside_multi_array"])) {
  // Do something if the key was empty
}

Все вопросы, которые я нашел, - это поиск определенного значения внутри мульти-массива, а не просто проверка, является ли ключ пустым, и возвращение true / false.

Вот пример:

$my_multi_array = array(    
        0 =>  array(  
            "country"   => "",  
            "price"    =>  4,  
            "discount-price"    =>  0,  
        ),  
);

Это вернет true:

$my_key = "country";

if (check_multi_array_for_empty_value($my_multi_array, $my_key)) {
  //Run this code here because the "country" key in my multi dimensional array is empty 
}

Это также вернет true:

$my_key = "discount-price";

if (check_multi_array_for_empty_value($my_multi_array, $my_key)) {
  //Run this code here because the "discount-price" key in my multi dimensional array is empty
}

Это вернет false:

$my_key = "price";

if (check_multi_array_for_empty_value($my_multi_array, $my_key)) {
  //This WILL NOT RUN because the "price" key in my multi dimensional array is NOT empty
}

Когда я говорю пусто, я имею в виду, как это empty ()

UPDATE:

Я пытаюсь адаптировать код из этого вопроса но пока безуспешно. Вот то, что я имею до сих пор, любая помощь по исправлению будет оценена:

function bg_empty_value_check($array, $key)
{
    foreach ($array as $item)
    {
        if (is_array($item) && bg_empty_value_check($item, $key)) return true;
        if (empty($item[$key])) return true;
    }
    return false;
}

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Функция ниже может помочь вам проверить пустое значение во вложенном массиве.

function boolCheckEmpty($array = [], $key = null)
{
    if (array_key_exists($key, $array) && !empty($array[$key])) {
        return true;
    }
    if (is_array($array)) {
        foreach ((array)$array as $arrKey => $arrValue) {
            if (is_array($arrValue)) {
                return boolCheckEmpty($arrValue, $key);
            }
            if ($arrKey == $key && !empty($arrValue)) {
                return $arrValue;
            }
        }
    }
    return false;
}

Использование:

$my_multi_array = array(    
    0 =>  array(  
        "country"   => "aa",  
        "price"    =>  1,  
        "discount-price"    =>  0,  
    ),  
);
// Call
$checkEmpty = $this->boolCheckEmpty($my_multi_array, 'price');
var_dump($checkEmpty);

Примечание: эта функция такжевернуть false, если значение равно 0, потому что используется empty

0 голосов
/ 16 мая 2018

Вы должны вызвать рекурсивную функцию, например, у меня есть многомерный массив

function checkMultiArrayValue($array) {
        global $test;
        foreach ($array as $key => $item) {

            if(!empty($item) && is_array($item)) {
                checkMultiArrayValue($item);
            }else {
                if($item)
                 $test[$item] = false;
                else
                 $test[$item] = true;
            }
        }
        return $test;   
    }

 $multiArray = array(    
                0 =>  array(  
                      "country"   => "",  
                      "price"    => 4,  
                      "discount-price" => 0,  
               ),);

$test = checkMultiArrayValue($multiArray);
echo "<pre>"
print_r($test);

Вернет массив с истиной и ложью, у которого ключ и индекс будут содержать истину, а у кого индекс, но не значение - ложь, вы можете использовать этот массив, где вы проверяете свое состояние

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...