Как удалить значение, имеющее пустой ключ из ассоциативного массива в PHP?
У меня есть ключ, который представляется пустой строкой, однако использование unset($array[""]);
не удаляет пару ключ/значение. Я не вижу другой функции, которая делает то, что я хочу, поэтому я предполагаю, что это сложнее, чем просто вызов функции.
Строка для элемента на print_r равна [] => 1
, что указывает мне, что ключ является пустой строкой.
Используя var_export, этот элемент указан как '' => 1
.
Используя var_dump, элемент указан как [""]=>int(1)
.
До сих пор я пробовал все предлагаемые методы удаления, но ни один из них не удалил элемент. Я пробовал unset($array[""]);
, unset($array['']);
и unset($array[null]);
без везения.
Ответы
Ответ 1
Попробуйте unset($array[null]);
Если это не сработает, напечатайте массив через var_export
или var_dump
вместо print_r
, так как это позволит вам увидеть тип ключа. Используйте var_export
для просмотра данных в синтаксисе PHP.
var_export($array);
Обратите внимание, что var_export не работает с рекурсивными структурами.
Ответ 2
Пробовал:
$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 )
Вы должны проанализировать, откуда приходит ключ...
Ответ 3
Я предполагаю, что это не пустая строка. Попробуйте следующее, чтобы узнать, что вы получаете:
foreach ($array as $index => $value) {
echo $index;
echo ' is ';
echo gettype($index);
echo "\n";
}
Ответ 4
Попробуйте использовать var_dump
вместо print_r
. Это может дать вам лучшее представление о том, что именно является ключом.
Ответ 5
Не уверен, что вам сказать. Запуск этого script
<?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" был преобразован в пустую строку?
Вы уверены, что не работаете с копией массива? Если вы выполнили этот вызов для отмены() изнутри функции, возможно, что вы находитесь.
Это было протестировано на PHP 5.2.0
Ответ 6
Пожалуйста, разместите код, который вы используете, чтобы удалить элемент, а также ваш код проверки до и после этой строки.
Я ищу что-то вроде этого:
var_export($array);
echo "\n";
unset($array[""]);
var_export($array);
Пожалуйста, также опубликуйте полный вывод обеих строк var_export
.
Я ищу что-то вроде этого:
array (
'' => 1,
)
array (
)