J'essaye de faire une boucle. Quelque chose comme ça:

J'ai 1000 disques. Dans ces 1000 enregistrements, cela devrait prendre

  • 200 premiers
  • puis 201-400
  • puis 401-600
  • puis 600-800
  • puis 801-1000

Voici mon code:

for($i=1; $i<=1000; $i++){
if($i > 200){
//$this->db->save(); //save some data
break;
}

echo $i."<br>";

if($i == 200){
  for($i=201; $i<=400; $i++) {
  //$this->db->save();  //save some data
  echo $i."<br>";
   }
}

if($i == 400) {
  for($i=401; $i<=600; $i++){
     echo $i."<br>";
   }
 }

Partie 2:

$totalClientCount = 1000;      

$input_array    =    range(1, $totalClientCount);
$chunks         =    array_chunk($input_array, 200);

foreach ($chunks as $k => $chunk) { 

if ($k == 0) {  // 0-200
  $this->db->where('AccountNo', $id);
  //$this->db->limit($offset,$limit);
  $getClientDetails = $this->db->get('table');
  echo '<pre>';
  print_r($getClientDetails);    
}

C'est là que je suis coincé. Comment exécuter cela correctement?

0
Mitukula 20 avril 2017 à 07:50

3 réponses

Meilleure réponse

Vous devriez utiliser array_chunk () ici. Laissez-moi vous montrer un exemple avec 100 entrées, avec les 20 premiers, 21-40, 41-60 et ainsi de suite.

$input_array    =    range(1, 100);
$chunks         =    array_chunk($input_array, 20);

Voici à quoi ressemblera le tableau $ chunks:

Array
(
   [0] => Array
    (
        [0] => 1
        [1] => 2
        ......
        [9] => 10
     ),
  [1] => Array
    (
        [0] => 21
        [1] => 22
        .......
        [2] => 40
     )
     .........
     .........
   [4] => Array
      (
        [0] => 81
        [1] => 82
        ......
        [19] => 100 
   )

Maintenant, parcourez votre tableau $ chunks.

foreach ($chunks as $k => $chunk) {
    /* $k = 0 means first 20 items */
    if ($k == 0) {
        // your code here
    }
    foreach ($chunk as $i) {
        echo $i;
        echo '<br/>';
    }
}
2
Object Manipulator 20 avril 2017 à 05:02

Au cas où vous effectuez une tâche même après une plage donnée [200], vous pouvez utiliser ceci:

$range = 200;
for($i=1; $i<=1000; $i++){
  //$this->db->save();
  if ($i%$range == 0) {
    //...
  }
}

En gros ici, vous appelez $this->db->save() à chaque fois jusqu'à la fin de la boucle et utilisez simplement 201,401,601,801 pour faire autre chose, comme imprimer la valeur actuelle de $i

Au cas où vous souhaiteriez effectuer des tâches séparées après chaque plage:

$range = 200;
$fn = 0;
for($i=1; $i<=1000; $i++){
  $functionToCall = 'fn_'.$fn;
  $functionToCall();
  if ($i%$range == 0) {
    $fn = $i+1;
  }
}

function fn_0()
{
  //...
}

function fn_201()
{
  //...
}

function fn_401()
{
  //...
}

function fn_601()
{
  //...
}

function fn_801()
{
  //...
}

C'est toujours une bonne pratique de séparer logiquement vos fonctions.

De plus, si vous devez simplement enregistrer 1000 fois, n'utilisez pas de boucle pour insérer. Essayez plutôt l'insertion par lots, quelque chose comme insérez plusieurs lignes via un tableau php dans mysql

1
Community 23 mai 2017 à 10:31

Vous pouvez utiliser array_splice. Si vous devez envoyer le tableau avec un intervalle spécifique, c'est la meilleure option.

Je l'ai implémenté dans mon code pour l'envoi de notifications pour 1000 identifiants à la fois.

$sendIds = array_splice($your_array,0,199);
0
Nishant Nair 20 avril 2017 à 05:02