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.

È stato utile?

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 (
)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top