0

私はこのサイクルを持っています:

   $diffe = $differenz*7;  
    $diff = 0; 
    $n = 0;
    $an = $anzahl-1;
    $z = 0;
    $plus = $periode;
    $oarray = array();
    $sarray = array();
    $parray = array();
    $h = 0;

    while ($n < $ortcount) {
    foreach ($ortearray as $o) {
    $oarray[] = $o;
    }
    $sarray[] = get_start_dates($star, $diff, $wochearray); 
    $diff += $diffe;

    while ($h < $ortcount) {
    $helpingstring= join(";",$sarray[$h]);
    echo $h;
    $sarrayhelp = explode(";", $helpingstring);

    while ($z < $an) {

    foreach ($sarrayhelp as $s) {         
    $parray[] = plustime($s, $plus);        

    }
    $plus = $plus+$periode;
    $z++;

    }
    $h++;
    }

    $n++;

    }

そして以下が必要です:

多次元配列 "$sarray[]" のすべての "部分配列" は、plustime() 関数によって段階的に処理され、結果は "$parray[]" に保存されます。

現時点では、「$sarray[]」の最初の部分配列のみが処理されています。

どんな助けでも大歓迎です。助けてください!

4

1 に答える 1

2

再帰関数を作成します。

function process(&$parray, $array, $plus){
  foreach($array as $s) {
    if(is_array($s)) {
      // this is subarray
      process($parray, $s, $plus);
      continue ;
    }
    $parray[] = plustime($s, $plus);
  }
}

.....
while ($z < $an) {
  process($parray, $sarrayhelp, $plus);
  ..

不適切なインデントと短い変数 ( $a, $az,$n, $an, $h, $z, $parray, $oarray, $diff, $diffe) を使用すると、コードのメンテナンスが非常に難しくなり、他の人が理解することが難しくなります。

于 2012-09-01T17:18:12.437 に答える