У меня есть массив $d_visitors = array_count_values($d_visitors);
array:7 [▼
2 => 4
5 => 1
8 => 2
3 => 1
1 => 2
9 => 3
0 => 2
]
Я пытаюсь перебрать этот массив 24 раза, и проверить, если ключ Матчи, и сохранить его значение.
$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
]
Но я продолжал получать это:
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
]
Попробуйте так:
$dv = [];
for ($i = 0; $i < 24; $i++){
$dv[$i] = 0;
if (isset($d_visitors[$i])) {
$dv[$i] = $d_visitors[$i];
}
}
Более упрощенным является:
$dv = [];
for ($i = 0; $i < 24; $i++){
$dv[$i] = isset($d_visitors[$i])? $d_visitors[$i] : 0;
}
Проблема в вашем коде в строке $dv[$i] = 0;
как он обнуляется $dv[$i]
который ранее был установлен.
Вам нужно использовать один 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;
}
}
Другой способ задать свой процесс:
Как я могу:
ksort()
массив результатов?Хотя вы можете достичь желаемого результата, используя foreach()
цикл и оператор условия на каждой итерации, я могу показать вам более краткий, простой подход:
Это ваш новый массив данных: $array=[2=>4,5=>1,8=>2,3=>1,1=>2,9=>3,0=>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)));
Готово — объединено и отсортировано.
Чтобы показать некоторые другие способы, которыми программисты могут попытаться объединить эти два массива (бесполезно или нелогично), вот демонстрация.