2011-11-02 26 views
18

Come si fa a troncare un array PHP in modo più efficace?PHP come troncare un array

Dovrei usare array_splice?

+0

Cosa vuoi ottenere? Fornire qualche esempio. – hsz

+6

Perché l'avversione a 'array_splice'? – Clive

+0

Ho letto un risultato di join SQL e ho bisogno di reimpostare un array associativo ogni 3 iterazione. Ho pensato che il conteggio potesse essere usato qui, come in alcune lingue in cui hai impostato la lunghezza dell'array su 0 ... –

risposta

18

È possibile utilizzare le funzioni native per rimuovere elementi di un array:

  • array_pop - Estrae l'elemento alla fine dell'array
  • array_shift - Spostare un elemento alla testa dell'array
  • array_slice - Estratto una fetta dell'array
  • unset - Rimuovere un elemento dall'array

Con questa conoscenza rendere la propria funzione

function array_truncate(array $array, $left, $right) { 
    $array = array_slice($array, $left, count($array) - $left); 
    $array = array_slice($array, 0, count($array) - $right); 
    return $array; 
} 

Demo - http://codepad.viper-7.com/JVAs0a

+0

Peter puoi spiegare quali sono i parametri '$ left' e' $ right' per –

+1

@RahilWazir troncare x '$ left' elementi da sinistra, troncare x' $ right' parametri da destra – Peter

4

Sì, a meno che non si desidera un loop all'interno di array e unset() gli elementi indesiderati.

+1

... e aggiornare le chiavi dell'array se fossero numerici – FMaz008

+0

Nota, in un foreach dovresti usare il riferimento completo dell'indice dell'array dato che foreach usa una copia dell'array. 'Foreach ($ array da $ key => $ value) {unset ($ array [$ key]}' non 'foreach ($ array da $ key => $ value) {unset ($ value)}'. Il secondo –

0

È possibile utilizzare una di queste funzioni:

function array_truncate(&$arr) 
{ 
    while(count($arr) > 0) array_pop($arr); 
} 
// OR (faster) 
function array_truncate2(&$arr) 
{ 
    array_splice($arr, 0, count($arr)); 
} 

Usage:

$data2 = array("John" => "Doe", "Alice" => "Bob"); 
array_truncate($data2); 
// OR 
array_truncate2($data2); 
+0

Il 'while'- loop sarebbe probabilmente il modo più inefficiente per troncare un array :-) –

+0

@AlexanderFarber ovviamente lo è, è per questo che ho detto (nel commento) che l'altro è più veloce. Ho incluso il metodo array_pop per mostrare un metodo in cui hai la possibilità di fare qualcosa sull'elemento prima di scartarlo. –

2

Questo functi su dovrebbe funzionare

function truncateArray($truncateAt, $arr) { 
    array_splice($arr, $truncateAt, (count($arr) - $truncateAt)); 
    return $arr; 
}