У меня есть массив следующим образом.
Array (
[A] => Array (
[y] => 2014-11-26
[x] => 1
[zzz] => 2
[ww] => 1 )
[B] => Array (
[y] => 2014-11-27
[zzz] => 2 )
[C] => Array (
[y] => 2014-11-29
[ww] => 2 )
)
Подмассив ‘A’ имеет четыре элемента, в то время как другие подмассивы имеют только два элемента. Я хотел бы заполнить эти другие подмассивы теми же элементами массива A со значением 0, чтобы я получил новый массив следующим образом.
Array (
[A] => Array (
[y] => 2014-11-26
[x] => 1
[zzz] => 2
[ww] => 1 )
[B] => Array (
[y] => 2014-11-27
[x] => 0
[zzz] => 2
[ww] => 0 )
[C] => Array (
[y] => 2014-11-29
[x] => 0
[zzz] => 0
[ww] => 2 )
)
Ниже мой алгоритм. Поскольку я начинающий разработчик, я ищу лучший алгоритм, чтобы узнать больше.
$allArrayKey = array_keys($array);
$mostElement[0] = 0;
foreach($allArrayKey as $value) {
if($mostElement[0] < count($array[$value])) {
$mostElement[0] = count($array[$value]);
}
}
foreach($allArrayKey as $arr) {
if(count($array[$arr]) < $mostElement[0]) {
foreach ($allArrayKey as $xx) {
if(!array_key_exists($xx, $array[$arr])) {
$array[$arr][$xx] = '0';
}
}
}
}
Как я могу сделать это в PHP?
Создать фиктивный массив any_key => 0
и добавьте его к каждому подмассиву:
$a = array(
array('x' => 1, 'y' => 2, 'z' => 3, 'w' => 4),
array('x' => 11, 'y' => 22, ),
array('x' => 111, 'y' => 222),
);
$dummy = array_combine(
array_keys($a[0]),
array_fill(0, count($a[0]), 0)
);
foreach($a as &$v)
$v += $dummy;
print_r($a);
Если ваш PHP не поддерживает array_combine
использовать цикл для инициализации $dummy
:
foreach($a[0] as $k => $_)
$dummy[$k] = 0;
Наконец, чтобы вычислить объединение ключей из всех подмассивов вместо использования ключей первого элемента, init $dummy
как это:
foreach($a as $v)
foreach($v as $k => $_)
$dummy[$k] = 0;
Итак, как я сказал, получить все ключи из массива A:
$keys = array_keys($array['A']);
$ keys теперь массив со всеми ключами.
Теперь единственное, что вам нужно сделать, это зациклить весь массив и зациклить ключи, чтобы проверить, существуют ли они.
foreach($array as &$arr){
foreach($keys as $key){
if(!array_key_exists($key, $arr)){
$arr[$key] = 0;
}
}
}