2014-12-22 4 views
0

Я разбиваю массив на пять разных массивов, где весь первый элемент массива массива переходит к массиву $ first и second to $ second и т. Д., Вот мой полный код. пожалуйста помогите.PHP - Infinte для цикла при расщеплении массива

<?php 
$input = array("1", "2", "3", "4", "5", "10", "20", "30", "40", "50"); 

     $chunks = array_chunk($input, 5); 

     $count = sizeof($chunks); 
     $first = array(); 
     $second = array(); 
     $third = array(); 
     $fourth = array(); 
     $fifth = array(); 


     for($i=0;$i<$count;$i++) 
     { 
     $new = $chunks[$i]; 
     for($j=0;$j<5;$j++) 
     { 
      if($j=0) 
      { 
      $new[$j] = $first[$i]; 
      } 
      elseif($j=1) 
      { 
      $new[$j] = $second[$i]; 
      } 
      elseif($j=2) 
      { 
      $new[$j] = $third[$i]; 
      } 

      elseif($j=3) 
      { 
      $new[$j] = $fourth[$i]; 
      } 

      elseif($j=4) 
      { 
      $new[$j] = $fifth[$i]; 
      } 
      else 
      { 
      echo "error"; 
      } 

     } 

     } 

     echo "<pre>"; 
     print_r($first); 
     print_r($second); 
     print_r($third); 
     print_r($fourth); 
     print_r($fifth); 
    ?> 

Я пробовал много способов, но всегда оказываюсь на бесконечной странице загружаемой информации, и даже падает мой firefox. Я сижу с этим целый день, я просто не могу понять это.

+0

использовать foreach() вместо для кусков. – Jobayer

+0

во внутреннем цикле должно быть «==», а не просто «=» при сравнении в выражении if else –

ответ

0

использование == условного оператора вместо Назначают заявления, что случилось здесь, если вы используете оператор присваивания (=), если условие, оно всегда возвращает истину так, чтобы цикл будет бесконечным, и вы должны назначить $ первый [$ i] = $ new [$ j];

<?php 
$input = array("1", "2", "3", "4", "5", "10", "20", "30", "40", "50"); 

$chunks = array_chunk($input, 5); 

$count = sizeof($chunks); 
$first = array(); 
$second = array(); 
$third = array(); 
$fourth = array(); 
$fifth = array(); 


for($i=0;$i<$count;$i++) 
{ 
    $new = $chunks[$i]; 
    for($j=0;$j<5;$j++) 
    { 
     if($j==0) 
     { 
      //$new[$j] = $first[$i]; 
      $first[$i] = $new[$j]; 
     } 
     elseif($j==1) 
     { 
      $second[$i] = $new[$j]; 
     } 
     elseif($j==2) 
     { 
      $third[$i] = $new[$j]; 
     } 

     elseif($j==3) 
     { 
      $fourth[$i] = $new[$j]; 
     } 

     elseif($j==4) 
     { 
      $fifth[$i] = $new[$j]; 
     } 
     else 
     { 
      echo "error"; 
     } 

    } 

} 

echo "<pre>"; 
print_r($first); 
print_r($second); 
print_r($third); 
print_r($fourth); 
print_r($fifth); 

?>

0

Проблема заключается в том, что вы не проверять, если j равен числу, но назначение j ряда.

Заменить все Yout j=1//and the others по j == 1//and others

0

если условие используется для checking но вы делаете назначение:

так использовать == вместо =

и я не понимаю, почему вы :

$new[$j] = $first[$i]; // where $first array is blank array 

сделаю это:

$first[$i] =$new[$j];// to assign the content of new to $first; 
0

Прочитав ваш вопрос, я предполагаю, что вы пытаетесь превратить это:

["1", "2", "3", "4", "5", "10", "20", "30", "40", "50"] 

В это:

[["1", "2", "3", "4", "5"], ["10", "20", "30", "40", "50"]] 

Тогда это:

$first = ["1", "10"]; 
$second = ["2", "20"]; 
$third = ["3", "30"]; 
$fourth = ["4", "40"]; 
$fifth = ["5", "50"]; 

Идем:

<?php 
$input = array("1", "2", "3", "4", "5", "10", "20", "30", "40", "50"); 

$chunks = array_chunk($input, 5); 

// See below on using foreach 
// $count = sizeof($chunks); 
$first = array(); 
$second = array(); 
$third = array(); 
$fourth = array(); 
$fifth = array(); 

// You may consider the foreach() construct: 
//for($i=0;$i<$count;$i++){ 
foreach($chunks as $index => $new){ 
    // I've updated the following to work, but I think you can do this easier. See below. 

    for($j=0;$j<5;$j++){ 
     // You may consider the switch syntax: 
     switch($j){ 
      case 0: 
       $first[$index] = $new[$j]; 
       break; 
      case 1: 
       $second[$index] = $new[$j]; 
       break; 
      case 2: 
       $third[$index] = $new[$j]; 
       break; 
      case 3: 
       $fourth[$index] = $new[$j]; 
       break; 
      case 4: 
       $fifth[$index] = $new[$j]; 
       break; 
      default: 
       echo "error"; 
       break; 
     } 
    } 

    // I appreciate what you're doing, but if you're using hard variable names, you can: 
    $first[] = $new[0]; 
    $second[] = $new[1]; 
    $third[] = $new[2]; 
    $fourth[] = $new[3]; 
    $fifth[] = $new[4]; 
} 

echo "<pre>"; 
print_r($first); 
print_r($second); 
print_r($third); 
print_r($fourth); 
print_r($fifth); 
?> 

Однако, я хотел бы сделать это следующим образом:

<?php 
$input = array("1", "2", "3", "4", "5", "10", "20", "30", "40", "50"); 

$chunks = array_chunk($input, 5); 

$places = array(array(), array(), array(), array(), array()); 

// Loop through the chunks 
foreach($chunks as $chunk){ 
    // Use $key as the index number as it is the "place" in the chunk 
    foreach($chunk as $key => $value){ 
     // The $array[] = syntax just adds one to the end of the array. 
     // Since we're going in order anyways, we can trust this instead of specifying an index 
     $places[$key][] = $value; 
    } 
} 

print_r($places); 

// And if you want: $first = $places[0]; $second = $places[1]; etc etc 
?> 
2

вы проверяете

$j=0 

должно быть

$j==0 

если вы используете $j = 0 он всегда будет входить сначала if

for ($j=0; $j<5; $j++)// $j value will be always 1 it will never increase. and $j < 5 will be always true that's why the loop is looping infinitely. 
Смежные вопросы