2017-03-22 14 views
0

私は、combinedという関数を持っており、配列の配列をループします。具体的には、顧客の名前と住所行1に基づいて1つ以上の注文と一致する人を検索しています。顧客が2つの注文を行うと、これをキャッチして3つ以上の場合は結合します。私は再帰的に私は配列インデックスがすべての関数呼び出しでリフレッシュすると思った私が理解していない無効なオフセットエラーを取得する関数を呼び出しますか?あなたは、配列を再インデックスする必要があり再帰的配列クリーンアップ

function combined(Array $all) { 
//find any matching single orders and combine 
$count = count($all); 
$combinedorder = array(); 
for($i=1; $i < $count; $i++) { 
    for($j=1; $j < $count; $j++) { 
     //if order # is not the same 
     if(strcasecmp($all[$i][0], $all[$j][0]) !== 0){ 
      //if name matches 
      if(strcasecmp($all[$i][2], $all[$j][2]) == 0) { 
       //if address line 1 matches 
       if(strcasecmp($all[$i][3], $all[$j][3]) == 0) { 
        $combinedorder[] = array('ordernos' => array($all[$i][0], $all[$j][0]), $all[$i][1], $all[$i][2], $all[$i][3], $all[$i][4], $all[$i][5], $all[$i][6], $all[$i][7], $all[$i][8], $all[$i][9], $all[$i][10], 'orders' => array($all[$i][11], $all[$j][11])); 

        unset($all[$i]); 
        unset($all[$j]); 

        $all = array_merge($all, $combinedorder); 
        $all = array_values($all); 
        reset($all); 
      //this recursive call does not work. undefined offset error 
        combined($all); 
       } 
      } 
      } 
    } 
} 
return $all; 

}

+0

アレイの例と変更された外観を表示する必要があります。 – AbraCadaver

答えて

1

。一部のインデックスをunset($all[$i])unset($all[$j])で削除しています。したがって、関数が自分自身を呼び出し、ループが削除したインデックスにヒットすると、無効なオフセットエラーが発生します。

unsetの後にこのコードを追加するだけで、配列のキーをリセットすることができます。

$all = array_values($all); 
+0

私はまだエラーが発生しています。Notice:Undefined offset:91 – rbur0425

+0

内部で 'array_merge'の後に初めて' combine() 'を呼び出してから' print_r($ all) 'を呼び出す前に' print_r($ all)結合機能その後、 'combine()'をもう一度呼び出す前にスクリプトを終了し、結果をあなたの質問に編集しますか? –

+0

私はそれを得た。 array_values($ all)を実行した後、count変数を$ count = count($ all)でリセットする必要がありました。うまくいきます! – rbur0425