Как удалить значение с пустым ключом из ассоциативного массива в PHP? - PullRequest
13 голосов
/ 28 октября 2008

У меня есть ключ, который выглядит как пустая строка, однако использование unset($array[""]); не удаляет пару ключ / значение. Я не вижу другой функции, которая делает то, что я хочу, поэтому я предполагаю, что это сложнее, чем просто вызов функции.

Строка для элемента в print_r - [] => 1, что указывает на то, что ключ является пустой строкой.

Используя var_export, элемент указан как '' => 1.

Используя var_dump, элемент указан как [""]=>int(1).

Пока что я перепробовал все предложенные методы удаления, но ни один из них не удалил элемент. Я попытался unset($array[""]);, unset($array['']); и unset($array[null]); без удачи.

Ответы [ 6 ]

24 голосов
/ 28 октября 2008

Попробуйте unset($array[null]);

Если это не сработает, выведите массив через var_export или var_dump вместо print_r, поскольку это позволяет увидеть тип ключа. Используйте var_export для просмотра данных в синтаксисе PHP.

var_export($array);

Обратите внимание, что var_export не работает с рекурсивными структурами.

2 голосов
/ 28 октября 2008

Пробовал:

$someList = Array('A' => 'Foo', 'B' => 'Bar', '' => 'Bah');
print_r($someList);
echo '<br/>';
unset($someList['A']);
print_r($someList);
echo '<br/>';
unset($someList['']);
print_r($someList);
echo '<br/>';

Got:

Array ( [A] => Foo [B] => Bar [] => Bah )
Array ( [B] => Bar [] => Bah )
Array ( [B] => Bar )

Вы должны проанализировать, откуда взялся ключ ...

1 голос
/ 28 октября 2008

Не уверен, что тебе сказать. Запуск этого скрипта

<?php

$arr = array(
        false   => 1
    ,   true    => 2
    ,   null    => 3
    ,   'test'  => 4
//  ,   ''      => 5
);

print_r( $arr );

foreach ( $arr as $key => $value )
{
    var_dump( $key );
}

unset( $arr[''] );

print_r( $arr );

Я получаю следующий вывод

Array
(
    [0] => 1
    [1] => 2
    [] => 3
    [test] => 4
)
int(0)
int(1)
string(0) ""
string(4) "test"
Array
(
    [0] => 1
    [1] => 2
    [test] => 4
)

Посмотрите, как ключ массива "null" был преобразован в тип пустой строки?

Вы уверены, что не работаете с копией массива? Если вы сделали этот вызов функции unset () внутри функции, возможно, вы это сделали.

Это было проверено на PHP 5.2.0

1 голос
/ 28 октября 2008

Попробуйте использовать var_dump вместо print_r. Это может дать вам лучшее представление о том, что именно является ключом.

1 голос
/ 28 октября 2008

Я предполагаю, что это не пустая строка. Попробуйте следующее, чтобы увидеть, что вы получите:

foreach ($array as $index => $value) {
    echo $index;
    echo ' is ';
    echo gettype($index);
    echo "\n";
}
0 голосов
/ 28 октября 2008

Пожалуйста, опубликуйте код, который вы используете для удаления элемента, а также ваш код проверки до и после этой строки.

Я ищу что-то вроде этого:

var_export($array);
echo "\n";
unset($array[""]);
var_export($array);

Просьба также опубликовать полный вывод обеих var_export строк.

Я ищу что-то вроде этого:

array (
  '' => 1,
)
array (
)
...