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