У меня есть такой список переменных:
$item[1]['Value']
$item[2]['Value']
...
$item[50]['Value']
Некоторые из них - null.
Как мне проверить, не является ли хотя бы один из них пустым, и в этом случае определить его (первый или последний случай) как новую переменную?
P.S. Как называется формат $var[number]['foo']? Это массив?
Прокрутите все и проверьте, пусто ли оно или нет, дает ли оно значение?
@Lithilion Да.
Пожалуйста, print_r($item) и покажите нам результаты или часть результатов, где несколько значений не пусты, а несколько значений пусты.
не уверен, что цикл является лучшим решением, также количество элементов неизвестно, может быть 1, может быть 50, может быть 100.
Используйте ответ Гомса и переберите массив
если бы это был просто $var[1], $var[2], думаю, я мог бы использовать in_array, есть ли способ сделать это, если формат - $var[1]['foo']?






Простой тест с использованием функции empty()
if (!empty($item[$i]['value'])
{
echo "exists";
}else{
echo "is not set";
}
Если вы хотите повлиять на новое значение, если оно не существует или не определено, вы можете использовать null coalescing operator
$item[$i]['value'] = $item[$i]['value'] ?? $newvalue;
но $i не определяется.
но я не знаю, сколько их существует. их может быть 50, и я просто хочу проверить, не пуст ли хотя бы один, и выбрать его.
Затем используйте ответ @jasinth premkumar
проверить хотя бы одно из них не пусто
<?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
Если вы хотите проверить все значения всех элементов массива, вы можете использовать для каждого.
Пример:
$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'));
Что ты имеешь в виду? Если
$item[34]не пустой,$newOne = $item[34]? Это оно?