質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

Q&A

解決済

3回答

694閲覧

多次元配列の中身を1列の文字に出したい。

kaizokuou_haha

総合スコア2

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

0グッド

0クリップ

投稿2022/01/29 15:02

編集2022/01/29 15:04

前提・実現したいこと

現在、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.*

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaizokuou_haha

2022/01/30 02:37 編集

みなさん、回答ありがとうございます。本当に助かります。 追記なのですが、[3]以降の要素間に0を5つ入れたいです。 ["20221111", "211018611134", "2021222324", "2526272829","303132333435"]の場合は、 202211112110186111342021222324"00000"2526272829"00000"3031323334350000....(200まで)(""は分かりやすくするために記入しています。) のようにしたいのですが、変数で何桁目に0を持っていて、桁数足すイメージでいいでしょうか?
guest

回答3

0

Laravel6

php

1 $results = [ 2 ["20221111", "223456789111", "8888888888", "9999999999"], 3 ["20221111", "101112131415", "1516171819"], 4 ["20221111", "211018600034", "2021222324", "2526272829"], 5 ["20221111", "211018600122", "1234567892", "1234567899", "1234567898", "1234567897"], 6 ]; 7 8 $output = collect($results)->map(function ($item) { 9 return substr(str_pad(implode('', $item), 200, '0'), 0, 200); 10 })->toArray(); 11 12 dump($output);

Laravel8

php

1 $output = collect($results)->map(function ($item) { 2 return Str::of(implode('', $item)) 3 ->padRight(200, '0') 4 ->limit(200, '') 5 ->__toString(); 6 })->toArray(); 7 8 dump($output);

投稿2022/01/30 00:01

kawax

総合スコア10377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaizokuou_haha

2022/01/30 11:20

ありがとうございました。助かりました。 理解して、活用できるよう頑張ります。
guest

0

ベストアンサー

地道にやったらこんなかんじかな

php

1$results = [["20221111","223456789111","8888888888","9999999999"], 2["20221111","101112131415","1516171819"], 3["20221111","211018600034","2021222324","2526272829"], 4["20221111","211018600122","1234567892","1234567899","1234567898","1234567897"]]; 5 6$s200 = str_repeat("0", 200); 7foreach ($results as $result) { 8 $tmp = implode('', $result); 9 $tmp .= substr($s200, 0, (200 - strlen($tmp))); 10 Storage::prepend('result\result.csv', $tmp); 11}

--- 追記 ---
コメントをうけて

php

1$s200 = str_repeat("0", 200); 2foreach ($results as $result) { 3 if (count($result) < 4) { 4 $tmp = implode('', $result); 5 } else { 6 $x = ''; 7 for ($i=0;$i<3;$i++) $x .= array_shift($result); 8 array_unshift($result, $x); 9 $tmp = ''; 10 foreach ($result as $s) $tmp .= $s . '00000'; 11 } 12 $res = $tmp . substr($s200, 0, (200 - strlen($tmp))); 13 Storage::prepend('result\result.csv', $res); 14}

投稿2022/01/29 21:09

編集2022/01/30 04:07
takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaizokuou_haha

2022/01/30 11:19

本当にありがとうございました、記述してあることを調べて理解して、力付けたいと思います。 もしよろしければ、もう一つ分からない方法があるので、回答いただけたら助かります。。
guest

0

php

1<?php 2 3$results = [ 4 ["20221111", "223456789111", "8888888888", "9999999999"], 5 ["20221111", "101112131415", "1516171819"], 6 ["20221111", "211018600034", "2021222324", "2526272829"], 7 ["20221111", "211018600122", "1234567892", "1234567899", "1234567898", "1234567897"], 8]; 9 10function convert($strings) 11{ 12 return substr(str_pad(join('', $strings), 200, '0', STR_PAD_RIGHT), 0, 200); 13} 14 15$replaces = array_map('convert', $results); 16var_dump($replaces);
array(4) { [0]=> string(200) "20221111223456789111888888888899999999990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" [1]=> string(200) "20221111101112131415151617181900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" [2]=> string(200) "20221111211018600034202122232425262728290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" [3]=> string(200) "20221111211018600122123456789212345678991234567898123456789700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }

投稿2022/01/29 17:47

編集2022/01/30 02:09
shiracamus

総合スコア5406

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaizokuou_haha

2022/01/30 11:19

ありがとうございました。 教えて頂いた内容理解して、今後の役に立てたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問