2016-08-25 12 views
2

特定の条件が満たされている場合、その配列を別の配列にプッシュする前に配列要素を配列に追加しようとします。今は別の配列として値を追加し、同じ配列にはありません。マルチディメンション配列にエントリを追加する

<?php 

for ($i = 0; $i < 4; $i++) { 
    $ret1[] = array("A" . $i, "B" . $i); 
    if ($i > 2) { 
     $ret1[] = array("C" . $i); 
    } 
}  

print_r($ret1); 

?> 

現在の結果:

Array 
(
    [0] => Array 
     (
      [0] => A0 
      [1] => B0 
     ) 

    [1] => Array 
     (
      [0] => A1 
      [1] => B1 
     ) 

    [2] => Array 
     (
      [0] => A2 
      [1] => B2 
     ) 

    [3] => Array 
     (
      [0] => A3 
      [1] => B3 
     ) 

    [4] => Array ( [0] => C3 ) 

) 

期待される結果は:

Array 
(
    [0] => Array 
     (
      [0] => A0 
      [1] => B0 
     ) 

    [1] => Array 
     (
      [0] => A1 
      [1] => B1 
     ) 

    [2] => Array 
     (
      [0] => A2 
      [1] => B2 
     ) 

    [3] => Array 
     (
      [0] => A3 
      [1] => B3 
      [2] => C3 
     ) 

) 
+0

if/elseステートメントを作成し、条件が満たされた場合は配列内に3つの値をすべて追加します。 '$ ret1 [] = array(a、b、c)'そして、配列としてaとbを追加するだけです。 – Rizier123

+1

あなたの事例では何が効果がありませんか? –

+0

[array_push](http://php.net/manual/en/function.array-push。最初の引数が単一次元配列であると予想されることを覚えておいてください。2番目のレベルの配列に追加する場合は、 'array_push($ ret1 [INDEX]、VALUE)'が必要です。 –

答えて

1

あなたは配列を定義するために、一時的な変数を使用することができます。次に、条件に基づいて別の要素をプッシュすることができます。最後に、テンポラリ配列を$ret1配列にプッシュして、目的の結果を得ることができます。

for ($i=0; $i<5; $i++) { 
    $arr = ["A$i", "B$i"]; 
    if ($i > 2) { 
     $arr[] = "C$i"; 
    } 
    $ret1[] = $arr; 
}  

ループの最後の2回の反復で2つの要素を配列にプッシュしています。 1つは["A3", "B3"]の値を持ち、もう1つは["C3"]の値を持ち、ちょうど[["A3", "B3"], ["C3"]]という結果になります。一時変数$arrを使用することにより、条件文が実行またはバイパスされるまで、最後の配列を$ret1にプッシュすることを延期します。

は、したがって、たとえば、このループの最後から二番目の反復で$arrの値が、その後、私たちは$arr = ["A3","B3","C3"]を作るtrue、という$i > 2に基づいて$arrの最後に別の値"C3"を最初に["A3","B3"]押しされ、最終的に我々はへ$arrを押します配列$ret1私たちの最終的な結果を与える[ ..., 3 => ["A3","B3","C3"], ...]

ボーナスノートの最後には、このの

なしあなたの問題や、あなたの質問に重要ではありませんが、私は念のためにそこにそれを投げるはずと考えました。 PHPで

double quoted stringsはあなたの自動変数展開を与えます。つまり、"A$i" === "A" . $iを意味します。だから考慮すべきことだけです。さらに、since PHP 5.4.0が利用可能なshort-hand syntax for arraysがあり、私の個人的な意見では、伝統的なarray()構造を使用するよりも、読み書きが容易です。だからarray("A" . $i, "B" . $i) === ["A$i", "B$i"]。あなたが使用するたびに

$ret1[] = something 

PHPが自動的に$ret新しいインデックスを作成するため

+0

非常に良い説明、そして最後から2番目に言う良い機会を見つけることをお祝いします。 –

+0

そうです、私はたいてい1年に1〜2回しか言わないので、私がすると素晴らしい気分になります:) – Sherif

+0

ボーナスノートに感謝します。それは本当に読みやすくします。 –

1

何をやっていることは、あなたが期待する結果を与えていません。

$retに挿入したばかりの配列に別の文字列を追加する場合は、ではなく、$ret1[$i][] = "C" . $i;で現在のキーを指定できます。

関連する問題