2010-08-02 4 views
0

Dans un tableau multidimensionnel, chaque tableau a un champ 'order'. Je dois changer cette valeur comme suit:Traitement du nombre PHP

0 -> 3  
1 -> 2  
2 -> 1  
3 -> 0 
4 -> 7 
5 -> 6 
6 -> 5 
7 -> 4 
8 -> 9 
9 -> 8 

etc ...

Ill faire cela tout en itérer le tableau comme suit

$c = 0; 
     foreach($data['images'] as $i) 
     { 
      //$i['order'] contains the original order value 

      $processed_imgs[$c]['file'] = $i['file']; 
      $processed_imgs[$c]['text'] = $i['text']; 
      $processed_imgs[$c]['order'] = 'X';      
      $c++; 
     } 

$ i [ 'ordre'] contient la valeur de la commande d'origine (colonne de gauche dans le premier extrait de code, qui sort du DB ASC) et doit être remplacée par le nombre correspondant dans la colonne de droite. Donc, fondamentalement, la valeur doit être changée dans l'ordre inverse, en regardant chaque ensemble de nombres par blocs de 4. Je ne saurai pas quel sera le numéro de commande le plus élevé, il augmentera à mesure que de nouvelles images seront ajoutées .

Quelle est la meilleure façon de le faire en utilisant le foreach ci-dessus?

+0

cela semble répondre à vos questions tout à fait bien http://stackoverflow.com/questions/1316916/php-function-to-reorder-an-array – Prix

Répondre

1

Relancez juste sur le plan

$orderMap = array(3, 2, 1, 0, 7, 6, 5, 4, 9, 8); 

$c = 0; 
foreach($data['images'] as $i) 
{ 
    //$i['order'] contains the original order value 

    $processed_imgs[$c]['file'] = $i['file']; 
    $processed_imgs[$c]['text'] = $i['text']; 
    $processed_imgs[$c]['order'] = $orderMap[$i['order']];      
    $c++; 
} 
+0

Solution parfaite et très simple. Merci beaucoup. – stef

0
$processed_imgs[$c]['order'] = floor($i['order']/4)*4 + 3-$i['order'] % 4; 

puis une correction pour le dernier bloc ...

if (count($data['images'])-1-$i['order'] < count($data['images'])%4) { 
    $processed_imgs[$c]['order'] -= 4-count($data['images'])%4; 
} 

Bien sûr re-mapping avec un tableau supplémentaire fonctionne très bien, mais vous devez toujours générer la carte en quelque sorte.

+0

Cela donne: 0-> 3 1-> 2 2-> 1 3-> 0 4-> 4 5-> 6- 3 > 2 7-> 1 8-> 5 9-> 4 – stef

+0

Désolé, cette version éditée donne le résultat de votre description textuelle. Il ne correspond pas à votre exemple pour 8 et 9 cependant. Je ne sais pas de quelle manière vous le vouliez. – maschka

+0

Cela fonctionne mais seulement s'il y a un nombre total d'images qui est un multiple de 4. Fermer ... – stef