質問: $flag + 1; // 共通処理 $output .=$user[$i] . "-" . $user_status[$j]; } } } return $output; ``` ### 備考 $user, $user_status の配列の数は入力によって変化します
回答: 動かしてないのでどこか違うところがあるかもしれませんが、 自分なら概ね以下のように書きます。 * forをforeachに変更 * $flagを$countに ($iでも$tmpcntでもいいですが、カウントしているということが分かる名称に) * 三項演算子を使って、「100ごとに改行・それ以外はカンマ」を分かりやすく ただし、ご自身や周囲が「foreachや三項演算子を使い慣れていない」という場合はかえって管理コストがかかりそうですね。 ``` //$user = array( ... // 省略 //$user_status = array( ... // 省略 $output = ""; $count = 0; foreach ($user as $u_val){ foreach ($user_status as $us_val){ $count ++; $output .= ($count % 100 == 0) ? "\n" : ","; $output .= $u_val . "-" . $us_val; } } return $output; ``` さらに行数や変数を減らすとこのような書き方もできますが、 ここまでくるとトリッキーすぎるかと思います。 個数をカウントせずにとりあえず「$data_list」配列に入れて、 あとから「カンマ区切り、ただし100ごとに改行区切り」をしています。 ``` //$user = array( ... // 省略 //$user_status = array( ... // 省略 $data_list = array(); foreach ($user as $u_val){ foreach ($user_status as $us_val){ $data_list[] = $u_val . "-" . $us_val; } } return implode("\n", array_map(function($list){return implode(",", $list);}, array_chunk($data_list, 100))); ``` ...読みにくいですよね? 書いておいて何ですが、ナシだと思います。 個人的にはですが、きちんとコメントを書いておけばOK、の域を超えていると思います。 行数やネストは減っているのに無駄なループは増えていますしね。 ただし、 「データをカンマ区切りで書くけど100個ごとに改行する、という処理を 他でも多く使うのでreturnに書いてあるごちゃごちゃを共通関数化する」 ということであれば、アリかもしれません。 (長くなってきた&余談的になるので、return部分の解説はコメントに書きます)