前提・実現したいこと
現在、Laravelを学習しています。
Laravelというより、配列の基礎的な項目にはなるかと思うのですが、
以下のような配列があります。配列内の配列の要素数は異なったものが存在しています。
配列の中身を、一列の文字列(200文字固定で200文字ない場合は0で補完)で表示したいです。
例えば、
[0]の場合、2022111122345678911188888888889999999999000000....(200文字)
[1]の場合、20221111201112131415161718000....(200文字)
[3]の場合、202211112110186001221234567892123456789912345678981234567897000....(200文字)
のような感じにしたいです。
配列内の配列の要素数は、最低で3つは確実の入り、多くなっても10程度を想定しています。
$results(4) {
[0]=>
array(4) {
[0]=> string(8) "20221111"
[1]=> string(12) "223456789111"
[2]=> string(10) "8888888888"
[3]=> string(10) "9999999999"
}
[1]=>
array(3) {
[0]=> string(8) "20221111"
[1]=>string(12) "101112131415"
[2]=>string(10) "1516171819"
}
[2]=>
array(4) {
[0]=> string(8) "20221111"
[1]=> string(12) "211018600034"
[2]=> string(10) "2021222324
[3]=> string(10) "2526272829"
}
[3]=>
array(4) {
[0]=> string(8) "20221111"
[1]=> string(12) "211018600122"
[2]=> string(10) "1234567892"
[3]=> string(10) "1234567899"
[4]=> string(10) "1234567898"
[5]=> string(10) "1234567897"
}
処理としてはこのように記述しているのですが、以下↓
該当のソースコード
php
1 foreach($results as $result){ 2 //ここでまず0を200文字を作成する 3 $string =str_repeat("0", 200); 4 //それぞれ配列の中身の数字を200文字の文字列に対して毎置換 5 $replace=substr_replace($string, $result[0], 0, 7); 6 $replace2=substr_replace($replace, $result[1], 8,20 ); 7 $replace3=substr_replace($replace2, $result[2], 21,31); 8 //要素数は3以上なので、3個の場合は文字列をcsvに書き出す(固定長) 9 if (count($result)==3){ 10 Storage::prepend('result\result.csv', $replace3); 11 //それ以上はfor文で回したいが、ここの書き方がわかりません。 12 }else{ 13 for($i=4; $i<count($result); $i++)){ 14 15 $replace3=substr_replace($replace3, $result[$i+3], $id_first, $id_length); 16 //ここも配列数に応じて変える必要がある 17 Storage::prepend('result\result.csv', $replace3); 18 } 19 } 20 }
試したこと
上のコードで、配列が3つの場合は問題なく文字列を書き出せるのですが、5つ目6つ目がある場合
for文で回したいのですが、書き換えが毎書き換えなのでうまくいきません。
4つ目までは、3つ目のものに書き換えればいいのでうまくいくのは想像つくのですが
それ以降、うまく書き出したいと思っています。
説明が難しく申し訳ありません。お力添えお願いいたします。
補足情報
PHP 7.4
Laravel 6.*
回答3件
あなたの回答
tips
プレビュー