2010-03-04 19 views
5
(I'm a beginner) 

Il mio script utilizza lo standardarray_diff & tasti numerici rinumerazione

$c = 0; 
$t = count($array); 

while ($c < $t) { 
    $blah = $array[$c]; 
    ++$c; 
} 

piuttosto ampiamente. Ma mi sono imbattuto in una situazione in cui ho anche bisogno di array_diff e si rompe tutto al diavolo perché ora i tasti numerici hanno lacune. Sto ricevendo errori Undefined offset dappertutto.

Come si ripristinano i tasti numerici di un array? L'ordine degli oggetti nell'array è irrilevante.

risposta

25

Per ripristinare le chiavi, è possibile utilizzare array_values():

$array = array_values($array); 
7

Non è necessario per ripristinare le chiavi di voi matrice: è necessario cambiare il modo in cui si sta andando attraverso di essa.

Invece di utilizzare un ciclo while e l'accesso ai elemnts matrice in base all'indice, è necessario utilizzare un ciclo foreach, che si ottiene solo gli elementi dalla matrice:

foreach ($array as $key => $value) { 
    // $key contains the index of the current element 
    // $value contains the value of the current element 
} 
+0

+1 per voi perché userò sicuramente quella conoscenza altrove. Ma il controllo deve andare a Tatu per colpire il bullseye. Grazie, Pascal. – Drew

+0

@Andrew: prego :-) ;; Sì, so che non stavo davvero rispondendo alla domanda, ma ho pensato che sarebbe stato comunque utile * (e uso sempre foreach per eseguire il loop sugli elementi degli array) * ;; e come ho visto un'altra risposta già parlato di 'array_values', non l'ho messo nel mio. –

+0

Apprezzo che tu abbia trovato il tempo di rispondere, davvero. Sto ancora bagnando i piedi e sono riconoscibile nella fase "I've got a kickass hammer" di imparare a programmare. Quindi, ancora una volta, grazie per la spinta espansiva e utile verso la progettazione di codice più appropriata. – Drew

2

Grazie Tatu.

Per il lulz, voglio condividere con voi la seguente mod idiota che ho usato in attesa di una risposta sensata:

$badArray = array_diff($allData, $myData); 

$string = implode(",",$badArray); 

$dump = explode(",",$string); 

$goodArray = $dump; 

lavorato. Mi ha fatto sentire tutto sporco, ma ha funzionato.