PHP Полный суб-массив с тем же количеством элементов

У меня есть массив следующим образом.

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?

1

Решение

Создать фиктивный массив 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;
1

Другие решения

Итак, как я сказал, получить все ключи из массива A:

$keys = array_keys($array['A']);

$ keys теперь массив со всеми ключами.
Теперь единственное, что вам нужно сделать, это зациклить весь массив и зациклить ключи, чтобы проверить, существуют ли они.

foreach($array as &$arr){
foreach($keys as $key){
if(!array_key_exists($key, $arr)){
$arr[$key] = 0;
}
}
}
0

По вопросам рекламы [email protected]