Crea 1d Array dal 1 ° membro di ciascun valore in 2d Array | PHP
-
22-07-2019 - |
Domanda
Come puoi farlo? Il mio codice visto qui non funziona
for($i=0;i<count($cond);$i++){
$cond[$i] = $cond[$i][0];
}
Soluzione
Dovrebbe funzionare. Perché non funziona? che messaggio di errore ricevi? Questo è il codice che vorrei usare:
$inArr;//This is the 2D array
$outArr = array();
for($i=0;$i<count($inArr);$i++){
$outArr[$i] = $inArr[$i][0];
}
Altri suggerimenti
Può essere semplice come questo:
$array = array_map('reset', $array);
Potrebbero esserci problemi se l'array di origine non è indicizzato numericamente. Prova invece questo:
$destinationArray = array();
for ($sourceArray as $key=>$value) {
$destinationArray[] = $value[0]; //you may want to use a different index than '0'
}
// Make sure you have your first array initialised here!
$array2 = array();
foreach ($array AS $item)
{
$array2[] = $item[0];
}
Supponendo di voler avere lo stesso nome di variabile in seguito, è possibile riassegnare il nuovo array a quello precedente.
$array = $array2;
unset($array2); // Not needed, but helps with keeping memory down
Inoltre, potresti essere in grado, a seconda di cosa si trova nell'array, di fare qualcosa del genere.
$array = array_merge(array_values($array));
Come precedentemente indicato, il codice non funzionerà correttamente in varie situazioni. Prova a inizializzare il tuo array con questi valori:
$cond = array(5=>array('4','3'),9=>array('3','4'));
Una soluzione, per me meglio leggibile, è anche il seguente codice:
//explain what to do to every single line of the 2d array
function reduceRowToFirstItem($x) { return $x[0]; }
// apply the trasnformation to the array
$a=array_map('reduceRowTofirstItem',$cond);
Puoi leggere il riferimento per la mappa di array per una spiegazione approfondita.
Puoi anche optare per una leggera variazione usando array_walk (opera sull'array "sul posto"). Si noti che la funzione non restituisce un valore e che il suo parametro viene passato per riferimento.
function reduceToFirstItem(&$x) { $x=$x[0]; }
array_walk($cond, 'reduceToFirstItem');