2012-05-01 6 views
1

J'ai mis comme ci-dessous sur(Insertion) un index de tableau

[0] 
{ 
    [0]=>'a' 
    [2]=>'b' 
    [5]=>'c' 
    [6]=>'d' 
} 

Non Qu'est-ce que je veux est d'insérer index de tableau non créé et définir leurs valeurs « 0 ». Par exemple: dans ce cas, je veux une sortie comme ci-dessous au lieu de celle ci-dessus. Quelqu'un peut-il me montrer un échantillon de code s'il vous plaît ............. j'ai essayé d'utiliser array_fill() mais ne fonctionnait pas il suffit d'insérer l'indice de tableau à la fin.

array_fill($b1, 1, "0"); 

sortie souhaitée:

[0] 
    { 
     [0]=>'a' 
     [1]=>'0' 
     [2]=>'b' 
     [3]=>'0' 
     [4]=>'0' 
     [5]=>'c' 
     [6]=>'d' 
    } 

Répondre

1

Cycle par votre tableau, en regardant les clés. Chaque fois que la dernière itération est supérieure à 1 à partir de la clé actuelle, effectuez une boucle courte pour rattraper le contenu du tableau.

$newArray = array(); 
$lastKey = 0; 

foreach ($array as $key => $value) { 
    while ($lastKey++ < $key) $newArray[] = 0; 
    $newArray[$key] = $value; 
} 

La sortie est:

Array 
(
    [0] => a 
    [1] => 0 
    [2] => b 
    [3] => 0 
    [4] => 0 
    [5] => c 
    [6] => d 
) 

Démo: http://codepad.org/9EnowzqL

+0

La sortie de '$ newArray' qui est. – hakre

+0

@hakre Oui, je suis désolé si ce n'était pas clair. – Sampson

0

En fait, la première chose qui vient à l'esprit est le tri du tableau par touches (ksortDocs) après avoir inséré les nouveaux éléments:

ksort($array); 

Cela résout probablement déjà votre problème. Tout le reste a besoin d'un peu plus de travail.

Edit: Si vous avez besoin de mettre tous unset, que assez simple ainsi:

$array = array(/* of set elements */); 
$array += array_fill($start, $end, "0"); # fill only unset, array union operator 
ksort($array); 
0

Je crois (non testé) cela fonctionnera:

// get the first used key 
    list($firstkey, $firstval)=each(asort($input_array)); 
    $input_array[$firstkey]=$firstval; 

    // get the last used key 
    list($lastkey, $lastval)=each(arsort($input_array)); 
    $input_array[$lastkey]=$lastval; 

    $output_array=array_replace(array_fill($firstkey, $lastkey, 0), $input_array); 
1
function fill_missing_keys($array) 
{ 
    $arr_keys = array_keys ($array); 
    $all_keys = range(0, max($arr_keys)); 
    $missing_keys = array_diff($all_keys, $arr_keys); 
    $zero_array = array_fill_keys ($missing_keys, '0'); 
    $filled_array = $array + $zero_array; 
    ksort($filled_array); 
    return $filled_array; 
} 

exemple en cours peuvent être trouvés ici: http://ideone.com/jDU99