Come si rimuove un valore che ha una chiave vuota da un array associativo in PHP?
-
04-07-2019 - |
Domanda
Ho una chiave che sembra essere una stringa vuota, tuttavia l'utilizzo di unset ($ array [" "]);
non rimuove la coppia chiave / valore. Non vedo un'altra funzione che fa quello che voglio, quindi immagino sia più complicato che chiamare una funzione.
La linea per l'elemento su un print_r è [] = > 1
, che mi indica che la chiave è la stringa vuota.
Usando var_export, l'elemento è elencato come '' = > 1
.
Usando var_dump, l'elemento è elencato come [" "] = > int (1)
.
Finora ho provato tutti i metodi di rimozione suggeriti, ma nessuno ha rimosso l'elemento. Ho provato unset ($ array [" "]);
, unset ($ array ['']);
e unset ($ array [ null]);
senza fortuna.
Soluzione
Prova unset($array[null[);
Se non funziona, stampa l'array tramite var_export
o var_dump
anziché print_r
, poiché ciò ti consente di vedere il tipo della chiave. Usa var_export
per vedere i dati nella sintassi di PHP.
var_export ($ array);
Nota che var_export non funziona con strutture ricorsive.
Altri suggerimenti
Hai provato:
$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 )
Dovresti analizzare anche da dove proviene la chiave ...
Suppongo che non sia una stringa vuota. Prova quanto segue per vedere cosa ottieni:
foreach ($array as $index => $value) {
echo $index;
echo ' is ';
echo gettype($index);
echo "\n";
}
Prova a utilizzare var_dump
anziché print_r
. Questo potrebbe darti un'idea migliore di quale sia esattamente la chiave.
Non so cosa dirti. Esecuzione di questo 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 );
Ottengo il seguente output
Array
(
[0] => 1
[1] => 2
[] => 3
[test] => 4
)
int(0)
int(1)
string(0) ""
string(4) "test"
Array
(
[0] => 1
[1] => 2
[test] => 4
)
Guarda come il " null " la chiave dell'array è stata convertita in una stringa vuota?
Sei sicuro di non lavorare con una copia dell'array? Se hai effettuato questa chiamata a unset () dall'interno di una funzione, è possibile che tu lo sia.
Questo è stato testato su PHP 5.2.0
Pubblica il codice che usi per rimuovere l'elemento e anche il tuo codice di controllo prima e dopo quella riga.
Quello che sto cercando è qualcosa del genere:
var_export($array);
echo "\n";
unset($array[""]);
var_export($array);
Pubblica inoltre l'output completo di entrambe le righe var_export
.
Sto cercando qualcosa del genere:
array (
'' => 1,
)
array (
)