2009-10-28 1 views
0

J'ai le problème suivant. J'ai les nombres 1/2/3/4/5/6 et je veux les séparer en deux groupes 1/3/5 et 2/4/6. La sélection doit avoir lieu en fonction de la position. Cette partie fonctionne bien. Le problème vient quand je veux les regrouper encore, quand j'utilise la fonction implode; il ne voit que le dernier numéro qui a été stocké. Je sais qu'il a quelque chose à voir avec moi en utilisant cette notation (j'ai choisi cette façon puisque la quantité de nombres à classer varie chaque fois):Utilisation d'implode pour grouper des informations provenant d'acquis dans un wheleloop

$q++; 
$row0 = $row0 + 2; 
$row1 = $row1 + 2; 

mais je ne peux pas trouver un moyen de réparer ou d'une autre façon pour obtenir le même résultat. J'espère que quelqu'un ici pourra me diriger dans la bonne direction. J'ai laissé le code complet ci-dessous.


<? 
$string = "1/2/3/4/5/6"; 
$splitted = explode("/",$string); 
$cnt = count($splitted); 
$q=0; 
$row0=0; 
$row1=1; 
while($cnt > 2*$q) 
{ 
    $p_row = implode(array($splitted[$row0])); 
    echo "$p_row <br>"; 
    $i_row = implode(array($splitted[$row1])); 
    echo "$i_row <br>"; 

    $q++; 
    $row0 = $row0 + 2; 
    $row1 = $row1 + 2; 
} 
$out = "implode(',', $i_row)"; 
var_dump($out); 
?> 

Répondre

0

Vous pouvez diviser le tableau en groupes à l'aide % sur l'indice de boucle. Mettez chaque groupe dans un tableau séparé. Voici un exemple:

<?php 
    $string = "1/2/3/4/5/6"; 
    $splitted = explode("/",$string); 
    $group_odd = array(); ## all odd elements of $splitted come here 
    $group_even = array(); ## all even elements of $splitted come here 
    for ($index = 0; $index < count($splitted); ++$index) { 
     ## if number is divided by 2 with rest then it's odd 
     ## but we've started calculation from 0, so we need to add 1 
     if (($index+1) % 2) { 
      $group_odd[] = $splitted[$index]; 
     } 
     else { 
      $group_even[] = $splitted[$index]; 
     } 
    } 
    echo implode('/', $group_odd), "<br />"; ## outputs "1/3/5<br />" 
    echo implode('/', $group_even), "<br />"; ## outputs "2/4/6<br />" 
    print_r($group_odd); 
    print_r($group_even); 
?> 
+0

Je viens de vérifier votre conseil et cela fonctionne bien. J'ai essayé de le résoudre pour le nôtre et ne pouvais pas trouver un moyen. Merci beaucoup :-) – Nigg

+0

Les calculs d'index peuvent être très compliqués –

0

D'après leur emplacement? Donc, divisé en fonction de la planéité/l'étrangeté de leur index dans le tableau?

Quelque chose comme ça?

<?php 

$string = "1/2/3/4/5/6"; 

list($evenKeys, $oddKeys) = array_split_custom(explode('/', $string)); 

echo '<pre>'; 
print_r($evenKeys); 
print_r($oddKeys); 

function array_split_custom(array $input) 
{ 
    $evens = array(); 
    $odds = array(); 
    foreach ($input as $index => $value) 
    { 
    if ($index & 1) 
    { 
     $odds[] = $value; 
    } else { 
     $evens[] = $value; 
    } 
    } 
    return array($evens, $odds); 
} 
1

J'ai mal lu le problème il semble. Au lieu de cela, je donne cette optimisation.

$string = "1/2/3/4/5/6"; 
$splitted = explode("/", $string); 
$group = array(); 
for ($index = 0, $t = count($splitted); $index < $t; ++$index) { 
    $group[$index & 1][] = $splitted[$index]; 
} 
$oddIndex = $group[0]; //start with index 1 
$evenIndex = $group[1]; //start with index 2 

echo "odd index: " 
    . implode('/', $oddIndex) 
    . "\neven index: " 
    . implode('/', $evenIndex) 
    . "\n"; 
+1

La seule chose que je peux penser est qu'il veut le faire sur l'index du tableau par opposition à la valeur du tableau. – Zak

Questions connexes