2016-04-04 34 views
0

Ben bu dizi 24 kez döngü çalışıyorum bir diziye $d_visitors = array_count_values($d_visitors);Varsayılan değerler dizisi ve yeni değerler dizisi kullanarak dizi nasıl oluşturulur?

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

var ve anahtar maçları olmadığını kontrol edin ve değerini depolar.

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

Böyle bir şey yazdırmak için çalışıyorum:

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 
] 

Ama bu elde tutulur:

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

Daha:

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

Başka bir parça koymanıza gerek yoktur. – Yash

+0

@Yash: kaldırarak, bu 'dizi var: 7 [▼ 0 => 2 1 => 2 2 => 4 3 => 1 5 => 1 8 => 2 9 = > 3 ] Hedefim 24'ünü elde etmektir. :) – ihue

+0

Şuraya benziyor ** @ u_mulder ** benim noktam oldu. – ihue

cevap

2

bu şekilde deneyin Basitleştirilmiş:

Daha önce ayarlanmış sıfıra $dv[$i] için ayarlar olarak
$dv = []; 
for ($i = 0; $i < 24; $i++){ 
    $dv[$i] = isset($d_visitors[$i])? $d_visitors[$i] : 0; 
} 

Kodunuzdaki sorunun hattı $dv[$i] = 0; içindedir.

1

Bir flag değişkenini kullanmanız gerekir. Kodunuz da doğru.

böyle deneyin:

$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

sürecinizi soran bir başka yoludur:

Ben nasıl:

  1. anahtarlarını temel başka dizi varsayılan bir dizi birleştirme
  2. ve ksort() sonuç dizisi?

Bir foreach() döngü ve her tekrarında bir koşul deyimi kullanarak istediğiniz sonucu elde edebilirsiniz, Sana çok daha özlü, basit bir yaklaşım gösterebilir: $array=[2=>4,5=>1,8=>2,3=>1,1=>2,9=>3,0=>2];

: Bu verilerin yeni dizisi

olduğunu

varsayılan veri dizisi oluşturmanın iki yolu vardır: daha zarif

$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 

ya:

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

Ardından, varsayılan değerleri yeni değerlerle üzerine yazmak için yalnızca array_replace() numaralı telefonu aramanız gerekir. Bu, anahtarları ASC düzeninde tutacaktır. Hatta yuva işlev çağrıları ve bu gibi küresel kapsamına değişken adları ekleyerek önleyebilirsiniz

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

:

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

- birleşti ve ksorted.


programcılar iki diziyi (fruitlessly veya mantıksız), burada bir demonstration olduğunu birleştirmek için deneyebilirsiniz bazı başka yollar göstermek için.