-1
votes

Ignorer un index dans la boucle foreach

J'ai vu des options pour ne frapper que certains nombres dans un foreach (si i <25, etc.) mais je me demande comment sauter complètement un index de chaîne

J'ai une boucle qui fonctionne parfaitement et je ne veux pas changer ce qu'elle fait, je veux juste omettre une ligne qui a l'index «employé»

J'ai essayé ce qui suit mais cela ne semble pas fonctionner car j'obtiens une erreur de syntaxe à mon instruction if

foreach ($arr as $row) {
  if($arr[] !== 'employee'){
        for ($i = 0; $i < count($colstrs); $i++) {
            $cellstr = $colstrs[$i] . $xrow;
            $ows->setCellValue($cellstr, $row[$i]);
            $ows->getStyle($cellstr)->getNumberFormat()->setFormatCode($this->numfmt);
        }
        $this->setFillColors($xrow);            
        $xrow++;
   }
}


2 commentaires

À quoi ressemble une $row ? Où est la valeur de l' employee ?


if(!array_key_exists('employee', $arr)) { ... } supposant que vous dites que l'employé est une clé que vous voulez éviter. Si la clé existe mais peut être vide, vous pouvez utiliser if(empty($arr['employee'])) {


3 Réponses :


1
votes

Essayez d'utiliser

continuer

Exemple

         $rows = array(
                [
                    'id'    => 2,
                    'name'  => 'Jon Doe'
                ],
                [
                    'id'    => 3,
                    'name'  => 'Smith'
                ]
            );
            foreach ($rows as $row){
                // if you are willing to skip who belongs id = 2
                if ($row['id'] == 2)
                    continue;
                
                //Do your business logics
                
            }


1 commentaires

Se mettre d'accord. Dans le cas où vous voudriez sauter plusieurs, vous pouvez ajouter une $blacklist et demander dans le if pour votre continue in_array($row['id'], $blacklist) . - Bien fait :)



1
votes

Considérant que vous voulez laisser le corps de la boucle intact, voici une approche non destructive possible. Ne rien vérifier à chaque itération vous évite également un peu de perte de performances. Voir les commentaires pour une explication étape par étape.

<?php

// Sample array. We'll be filtering out the first element ('a').
$a = ['a' => 123, 'b' => 2, 'c' => 'foo', 'd' => 'bar', 'abc' => 'def', 'def' => 789];

// Use array_filter() to copy the array on certain condition ($key !== 'a').
// Passing ARRAY_FILTER_USE_KEY will only pass the key to the callback, saving some memory.
// The original array is left untouched.
foreach (
    array_filter($a, function($key) { return $key !== 'a'; }, ARRAY_FILTER_USE_KEY)
    as $element
)
{
    var_dump($element);
}

/* Outputs:
int(2)
string(3) "foo"
string(3) "bar"
string(3) "def"
int(789)
*/


1 commentaires

Cela est parfaitement logique, merci pour cela. Je vois maintenant qu'il y a plusieurs façons mais cela m'a donné les meilleurs résultats



0
votes

Utilisez l'index de la boucle pour ignorer la section employé comme ceci.

foreach ($arr as $string_index => $row) {
  if(strtolower($string_index) !== 'employee'){
    //Content
  }
}



     

Je suppose que le reste de votre variable est défini ailleurs et n'a inclus que la partie de l'index car c'était un peu déroutant. Comme vous pouvez le voir, après le 'as', vous pouvez utiliser une variable $ suivie de '=>' puis de $ individual_row.

Cette première variable est l'index du tableau tandis que la deuxième variable est la ligne.

Codage heureux


0 commentaires