iwantit
@iwantit

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

PHP で for(foreach) 文で配列を作成したい

Q&A

Closed

PHP で for(foreach) 文で配列を作成したい

$sampleArray1 = array();
$sampleArray2 = array();
$sampleArray3 = array();
$sampleArray4 = array();

これをfor(foreach) 文で配列を複数作成するにはどうすればいいでしょうか?

配列名で

$ と sampleArray1

の連結をどうすればいいのかわかりません。

ご存知の方がいれば教えて下さい。

0

1Answer

Comments

  1. @iwantit

    Questioner

    まさにこれです。
    こんな書き方になるんですね。
    勉強になりました。
    ありがとうございます。
  2. @iwantit

    Questioner

    再度すみません。
    下記のif文を先程の配列で処理は可能でしょうか?


    `
    // カテゴリ毎に配列に入れる
    for($cnt=0; $cnt < count($types);$cnt++){

    if($types[$cnt]['category_id'] == 1){
    $cateArr1[] = $types[$cnt];
    }elseif($types[$cnt]['category_id'] == 2){
    $cateArr2[] = $types[$cnt];
    }elseif($types[$cnt]['category_id'] == 3){
    $cateArr3[] = $types[$cnt];
    }elseif($types[$cnt]['category_id'] == 4){
    $cateArr4[] = $types[$cnt];
    }elseif($types[$cnt]['category_id'] == 5){
    $cateArr5[] = $types[$cnt];
    }elseif($types[$cnt]['category_id'] == 6){
    $cateArr6[] = $types[$cnt];
    }elseif($types[$cnt]['category_id'] == 7){
    $cateArr7[] = $types[$cnt];
    }

    }
    `
  3. 細かくチェックしていませんが、多分こんな感じでしょう。

    for ($cnt = 0; $cnt < count($types); $cnt++) {
    ${"cateArr{$types[$cnt]['category_id']}"}[] = $types[$cnt];
    }
  4. @iwantit

    Questioner

    こんな日曜のお時間に早々の回答ありがとうござます。
    無事にできました!

    処理の内容は何となく分かるのですが、
    下記の部分が元のif文の処理になるということでしょうか?
    解説を頂けるとありがたいです。

    [$cnt]['category_id']}"}[] = $types[$cnt];
  5. 元の if文は$types[$cnt]['category_id']の値によって、cateArr の後ろの番号を変化させているので、この値をそのまま使って cateAttrX の変数名を組み立てています。

    どこがif文の処理かと言われれば、

    {$types[$cnt]['category_id']}

    この部分でしょうね。

    ただ、この記述方法を何度か見ていると、配列とよく似ていることに気づいたかもしれません。$cateAttr1~$cateAttr7という変数名がそもそも$cateAttr[1]~$cateAttr[7]という配列だったら、

    for ($cnt = 0; $cnt < count($types); $cnt++) {
    $cateArr[$types[$cnt]['category_id']][] = $types[$cnt];
    }

    こうなるので、もう少しわかりやすいかもしれません。

    更にオマケですが、このfor文の条件こそforeachで書く方がふさわしいように思えます。

    foreach ($types as $t) {
    $cateArr[$t['category_id']][] = $t;
    }
  6. @iwantit

    Questioner

    丁寧な解説ありがとうございます。

Your answer might help someone💌