it-roy-ru.com

PHP - пустой массив

(array)$someemptyvariablethatisnotarray возвращает array([0] =>) вместо array()

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

12
Alex

Функция, которую вы используете, называется " casting ". Это означает, что переменная вынуждена стать данным типом, в вашем примере это массив. Как преобразовывается var, не всегда очевидно в PHP! 

В вашем примере $ someemptyvariablethatisnotarray становится массивом с одной записью со значением NULL.

Документация PHP говорит:

Поведение автоматическое преобразование в массив в настоящее время не определено.

Чтобы решить ваш код, я бы порекомендовал что-то вроде этого:

if (!is_array($someemptyvariablethatisnotarray) {
    $someemptyvariablethatisnotarray = array();
}
18
powtac
$var = array();

очистит массив. Это то, что вы после?

24
trickwallett
if(!$variable){
        return array();
}
4
sharpner

как твои дела?

Я считаю, что это то, что вы после:

$something = false;
foreach((array)(empty($something) ? null : $something) as $k){
    echo 'never enters here';
}

Вы не получаете пустой массив, потому что когда вы устанавливаете «(массив) false», это означает, что у вас будет один элемент, и этому элементу будет присвоено значение «ЛОЖЬ».

То же самое происходит с пустой строкой (не нулевой!) (Массив) $ emptystring вернет массив, который содержит один элемент, который является пустой строкой!

Похоже на выполнение:

array('');

Надеюсь, поможет.

Ура!

3
fsodano
$somevar = empty($somevar) ? array() : (array)$somevar;

Может быть? Хотя я не уверен, что получу роль или цель. Хотите еще немного проработать (может быть, пример того, что вы пытаетесь достичь?)

3
Brad Christie

Попробуйте unset($someemptyvariablethatisnotarray[0]) :)

3
beta0x64

Когда вы преобразуете не массив как массив, он создает массив с этой переменной в качестве единственного значения.

Если вам нужен пустой массив, вам нужно вернуть array().

2
Rocket Hazmat

просто используйте count(), например: if(count($array) == 0 ){ // empty array }

0
james