Ottieni sottoinsieme di array associativo. Quale di questi è più leggibile? C'è un altro motivo per usare l'uno sull'altro (o un metodo diverso)

1

Se ho un array che ha più informazioni di quelle di cui ho bisogno e voglio estrarre un sottoinsieme delle sue coppie di valori nome, ho trovato 2 metodi.

Entrambi si basano su questo:

  $detailkeys=array(title,summary,subtitle,url,imgsrc,description);

Il metodo che ho trovato da solo:

  foreach ($detailkeys as $keyname) {
    $details[$keyname]=$data[$keyname];
  }

Il metodo che ho trovato online:

  // get just the desired parts of $data and put them in $details.
  $details=array_intersect_key($data, array_flip($detailkeys)); 

Il secondo metodo, con un commento decente, è quello che ho scelto, ma volevo vedere quello che chiunque altro aveva da dire al riguardo.

    
posta TecBrat 15.01.2014 - 20:38
fonte

1 risposta

1

Penso che il secondo metodo sia preferibile. E questo sembrerebbe perfettamente leggibile, a patto che tu abbia familiarità con la funzione array_intersect_key() (anche se questa è una rapida ricerca se non lo sei, e se lo sei è quasi auto-documentante). Ad essere onesti, penso che il tuo primo metodo richiederebbe anche un commento simile.

Il secondo metodo evita anche una variabile $keyname aggiuntiva. E poiché è una funzione integrata, ti aspetti che venga ottimizzata.

Hai provato a confrontare i risultati? (Anche se TBH con un set così piccolo di tasti "richiesti" non riesco a immaginare che questo sia significativo - I micro ottimizzazione al massimo.)

Potresti forse evitare la necessità di $detailkeys se hai inizializzato l'array $details con i tasti richiesti per iniziare (se possibile) ...

$details = array (
    'title' => null,
    'summary' => null,
    // etc.
);

Inoltre non avresti bisogno di chiamare array_flip() ...

$details = array_intersect_key($data, $details);

Tuttavia, vorrei anche sapere se è necessario creare un array di sottoinsiemi per cominciare. Se stai solo leggendo i dati, passandoli intorno e non cambiandoli, allora non è necessariamente un'ottimizzazione e potrebbe anche essere l'opposto.

    
risposta data 15.01.2014 - 21:26
fonte

Leggi altre domande sui tag