2016-04-04 13 views
0

私はその配列をループに24回をしよう、とキーマッチをかどうかをチェックし、その値を格納してい配列$d_visitors = array_count_values($d_visitors);デフォルト値配列と新しい値配列を使用して配列を生成するにはどうすればよいですか?

array:7 [▼ 
    2 => 4 
    5 => 1 
    8 => 2 
    3 => 1 
    1 => 2 
    9 => 3 
    0 => 2 
] 

を持っています。

$dv = []; 
for ($i = 0; $i < 24; $i++){ 
    foreach ($d_visitors as $k =>$v) { 
     if($i == $k){ 
      $dv[$i] = $v; 
     }else{ 
      $dv[$i] = 0; 
     } 
    } 
} 

は、私はこのような何かプリントアウトしようとしています:

array:24 [▼ 
    0 => 2 
    1 => 2 
    2 => 4 
    3 => 1 
    4 => 0 
    5 => 1 
    6 => 0 
    7 => 0 
    8 => 2 
    9 => 3 
    10 => 0 
    11 => 0 
    12 => 0 
    13 => 0 
    14 => 0 
    15 => 0 
    16 => 0 
    17 => 0 
    18 => 0 
    19 => 0 
    20 => 0 
    21 => 0 
    22 => 0 
    23 => 0 
] 

をしかし、私はこれを取得保管:

$dv = []; 
for ($i = 0; $i < 24; $i++){ 
    $dv[$i] = 0; 
    if (isset($d_visitors[$i])) { 
     $dv[$i] = $d_visitors[$i]; 
    } 
} 

より:

array:24 [▼ 
    0 => 2 
    1 => 0 
    2 => 0 
    3 => 0 
    4 => 0 
    5 => 0 
    6 => 0 
    7 => 0 
    8 => 0 
    9 => 0 
    10 => 0 
    11 => 0 
    12 => 0 
    13 => 0 
    14 => 0 
    15 => 0 
    16 => 0 
    17 => 0 
    18 => 0 
    19 => 0 
    20 => 0 
    21 => 0 
    22 => 0 
    23 => 0 
] 
+1

else部分を配置する必要はありません。 – Yash

+0

@Yash:= 7 [▼ 0 => 2 1 => 2 2 => 4 3 => 1 5 => 1 8 => 2 9:それを除去することにより、私はこの '配列を得> 3 ]「私の目標は、24点を得ることです。 :) – ihue

+0

のように見える** @ u_mulder **私の得点。 – ihue

答えて

2

は、この方法を試してみてください簡略化されます:

$dv = []; 
for ($i = 0; $i < 24; $i++){ 
    $dv[$i] = isset($d_visitors[$i])? $d_visitors[$i] : 0; 
} 

それは以前に設定されているゼロ$dv[$i]に設定して、あなたのコードに問題はライン$dv[$i] = 0;です。

1

変数flagを使用する必要があります。あなたのコードも正しいです。

は次のように試してみてください:

$dv = []; 
     $flag = 0; 
     for ($i = 0; $i < 24; $i++){ 
      $flag = 0; 
      foreach ($d_visitors as $k =>$v) { 
       if($i == $k){ 
        $dv[$i] = $v; 
        $flag = 1; 
       } 
      } 
      if($flag == 0){ 
       $dv[$i] = 0; 
      } 
     } 
1

あなたのプロセスを求めて別の方法は次のとおりです。

私はどうすればよい:

  1. がキーに基づいて別の配列を持つデフォルトの配列をマージ
  2. 結果配列はksort()ですか?

あなたが各反復でforeach()ループと条件文を使用して、所望の結果を達成することができますが、私はあなたをより簡潔、単純なアプローチを表示することができます。

これは、データの新しい配列です:$array=[2=>4,5=>1,8=>2,3=>1,1=>2,9=>3,0=>2];

デフォルトのデータ配列を設定するには2つの方法があります。エレガント

$defaults=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; // 24 elements with 0 value 

以上:

は、
$defaults=array_fill(0,24,0); 

デフォルト値を新しい値で上書きするには、array_replace()を呼び出すだけです。これにより、キーがASC順に保持されます。

var_export(array_replace($defaults,$array)); 

あなたも巣関数呼び出しことができ、このようなグローバルスコープに変数名を追加しない:完了

$d_visitors=array_replace(array_fill(0,24,0),array_count_values($d_visitors))); 

- 合併しksorted。


プログラマは二つの配列(無意味または非論理的)を組み合わせることを試みるかもしれないいくつかの他の方法を表示するには、ここにdemonstrationです。

関連する問題