Проверить, не является ли хотя бы один элемент в группе элементов пустым

У меня есть такой список переменных:

$item[1]['Value']
$item[2]['Value']
...
$item[50]['Value']

Некоторые из них - null.

Как мне проверить, не является ли хотя бы один из них пустым, и в этом случае определить его (первый или последний случай) как новую переменную?

P.S. Как называется формат $var[number]['foo']? Это массив?

Что ты имеешь в виду? Если $item[34] не пустой, $newOne = $item[34]? Это оно?

Lithilion 24.03.2018 15:58

Прокрутите все и проверьте, пусто ли оно или нет, дает ли оно значение?

user8517929 24.03.2018 16:01

@Lithilion Да.

rockyraw 24.03.2018 16:06

Пожалуйста, print_r($item) и покажите нам результаты или часть результатов, где несколько значений не пусты, а несколько значений пусты.

rishijd 24.03.2018 16:07

не уверен, что цикл является лучшим решением, также количество элементов неизвестно, может быть 1, может быть 50, может быть 100.

rockyraw 24.03.2018 16:08

Используйте ответ Гомса и переберите массив

Lithilion 24.03.2018 16:08

если бы это был просто $var[1], $var[2], думаю, я мог бы использовать in_array, есть ли способ сделать это, если формат - $var[1]['foo']?

rockyraw 24.03.2018 16:11
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
7
861
7

Ответы 7

Простой тест с использованием функции empty()

if (!empty($item[$i]['value'])
{
    echo "exists";
}else{
   echo "is not set";
}

Если вы хотите повлиять на новое значение, если оно не существует или не определено, вы можете использовать null coalescing operator

$item[$i]['value'] = $item[$i]['value'] ?? $newvalue;

но $i не определяется.

rockyraw 24.03.2018 16:12

но я не знаю, сколько их существует. их может быть 50, и я просто хочу проверить, не пуст ли хотя бы один, и выбрать его.

rockyraw 24.03.2018 16:18

Затем используйте ответ @jasinth premkumar

Goms 24.03.2018 16:20

проверить хотя бы одно из них не пусто

<?php
   $atleast=0;//all are empty
   for($i=0;$i<count($item);$i++)
   {
     if (!empty($item[$i]['value']))
       $atleast=1;//one is empty;
   }
   if ($atleast==1)
     echo "there is more than one element which are not empty";
   else
      echo "all are emtpy";
?>

Это устанавливает последний найденный использованный элемент как newVariable.

for($i = 0; $i < sizeOf($item); i ++)
{
 if (isset($item[$i]['Value']))
 {
  $newVariable = $item[$i]['Variable'];
 }
}

Вы можете array_filter() и использовать empty() следующим образом:

// example data
$items = [
    ['Value' => null],
    ['Value' => 2],
    ['Value' => null],
];

// remove elements with 'Value' = null
$filtered = array_filter($items, function($a) { return !is_null($a['Value']); }) ;

$element = null;
// If there is some values inside $filtered,
if (!empty($filtered)) {
    // get the first element
    $element = reset($filtered) ;
    // get its value
    $element = $element['Value'];
}

if ($element)
    echo $element ;

будет выводить:

2
  • array_filter() возвращает массив с непустыми значениями (используя функцию использования).
  • empty() проверяет, пуст массив или нет.
  • reset() получает первый элемент в массиве.

Если вы хотите проверить все значения всех элементов массива, вы можете использовать для каждого.

Пример:

$item[1]['Value'] = "A";
$item[2]['Value'] = "B";
$item[4]['Value'] = "";
$item[3]['Value'] = NULL;


foreach ($item as $key => $value) {
    if (!empty($value['Value'])) {
        echo "$key It's not empty \n";
    } else {
        echo "$key It's empty \n";
    }
}

Результат:

1 It's not empty 
2 It's not empty 
3 It's empty 
4 It's empty 

Также вы можете видеть, что функция пустой считает NULL пустым.

----- РЕДАКТИРОВАТЬ -----

Я забыл добавить метод определения, если хотя бы один элемент пуст, вы можете использовать:

Пример

$item[1]['Value'] = "A";
$item[2]['Value'] = "B";
$item[4]['Value'] = "";
$item[3]['Value'] = NULL;


foreach ($item as $key => $value) {
    if (!empty($value['Value'])) {
        $item_result = false;
    } else {
        $item_result = true;
    }
}

if ($item_result) {
    echo "At least one item is empty";
} else {
    echo "All items have data";
}

Результат:

At least one item is empty

Если вы хотите использовать внутренний ключ в качестве имени переменной, вы можете проверить, можете ли вы его создать, и если да, то создать его:

function any($array) {
    foreach ($array as $key => $item) {
        if ($item) return $key;
    }
    return false;
}

$variableName = any($var);

if ($variableName !== false) {
    {$variableName} = "yourvalue";
} else {
    //We ran out of variable names
}

P.S. Формат $var[number]['foo'] - это массив с цифровыми клавишами снаружи и массив со строковыми клавишами внутри.

<?php
$data = 
[
    1  => ['foo' => ''],
    2  => ['bar' => 'big'],
    10 => ['foo' => 'fat']
];

$some_foo = function ($data) {
    foreach($data as $k => $v)
        if (!empty($v['foo'])) return true;

    return false;
};

var_dump($some_foo($data));
$data[10]['foo'] = null;
var_dump($some_foo($data));

Выход:

bool(true)
bool(false)

В качестве альтернативы вы можете отфильтровать значения foo, которые оцениваются как false:

$some_foo = (bool) array_filter(array_column($data, 'foo'));

Другие вопросы по теме