填充缺少值和键的数组

时间:2014-08-01 12:03:12

标签: php arrays

我有这个数组$all_zones有时缺少键和值,我想用乱码键的空值填充数组,这是数组:

Array
(
    [0] => Array
        (
            [id_zone] => 1
            [name] => Europe
            [price] => Array
                (
                    [0] => 3.00
                    [1] => 6.00
                )

            [id_delivery] => Array
                (
                    [0] => 1
                    [1] => 2
                )

        )

    [1] => Array
        (
            [id_zone] => 3
            [name] => Asia
        )

    [2] => Array
        (
            [id_zone] => 4
            [name] => Africa
            [price] => Array
                (
                    [0] => 3.00
                    [1] => 6.00
                )

            [id_delivery] => Array
                (
                    [0] => 3
                    [1] => 4
                )

        )

    [3] => Array
        (
            [id_zone] => 5
            [name] => Oceania
        )
)

问题是$all_zones[$key]['price']取决于每个区域有多少ranges,在这种情况下$range_count = count($all_ranges);会显示2,所以我想填补失踪2次的密钥:这是输出:

Array
(
    [0] => Array
        (
            [id_zone] => 1
            [name] => Europe
            [price] => Array
                (
                    [0] => 3.00
                    [1] => 6.00
                )

            [id_delivery] => Array
                (
                    [0] => 1
                    [1] => 2
                )

        )

    [1] => Array
        (
            [id_zone] => 3
            [name] => Asia
            [price] => Array
                (
                    [0] => 
                    [1] => 
                )

            [id_delivery] => Array
                (
                    [0] => 
                    [1] => 
                )
        )

    [2] => Array
        (
            [id_zone] => 4
            [name] => Africa
            [price] => Array
                (
                    [0] => 3.00
                    [1] => 6.00
                )

            [id_delivery] => Array
                (
                    [0] => 3
                    [1] => 4
                )

        )

    [3] => Array
        (
            [id_zone] => 5
            [name] => Oceania
            [price] => Array
                (
                    [0] => 
                    [1] => 
                )

            [id_delivery] => Array
                (
                    [0] => 
                    [1] => 
                )
        )
)

这是我迄今为止尝试过但没有成功的事情:

$range_count = count($all_ranges);
$i=0;
foreach ($all_zones as $key => $value) {
    if(isset($value['id_zone']) && isset($value['name']) && (!isset($value['price']) || !isset($value['id_delivery']))){
        if($range_count>$i){
                $disabled[]=$key;
                $all_zones[$key]['price'][] = '';
                $all_zones[$key]['id_delivery'][] = '';
        }
        $i++;
    }
}

对此有何帮助?非常感谢。

3 个答案:

答案 0 :(得分:0)

执行此操作的方法是遍历数组,在父数组中的每个数组上使用array_merge()来设置“默认值”。

$zone_template = array(
    'id_zone' => '',
    'name' => '',
    'price' => array(
        0 => '',
        1 => ''
    ),
    'id_delivery' = array(
        0 => '',
        1 => ''
    )
);

foreach ($all_zones as $zone) {
    array_merge($zone_template, $zone);
}

也可以使用array_walk()

完成

答案 1 :(得分:0)

您可能遇到运营商优先问题。

(  (!isset($value['price']) || !isset($value['id_delivery']))  ) 

答案 2 :(得分:0)

试试这个

$range_count = count($all_ranges);

foreach ($all_zones as $key => $value) {
    if(isset($value['id_zone']) && isset($value['name']) && (!isset($value['price']) || !isset($value['id_delivery']))){

        $disabled[]=$key;
        if((!isset($value['price']))
        {
            for($i=0; $i<$range_count<$i++)
            {
                $all_zones[$key]['id_delivery'][] = '';
            }
        }

        if((!isset($value['id_delivery']))
        {
            for($i=0; $i<$range_count<$i++)
            {
                $all_zones[$key]['id_delivery'][] = '';
            }
        }

    }
}