二维数组 - 使子数组键与所有

时间:2015-05-08 15:51:52

标签: php arrays

我有一个像这样的二维数组:

Array
(
    [0] => Array
        (
            [Product_Main_category] =>  Value 
            [Product_Sub_category1] =>  Value 
            [Product_Sub_category2] =>  Value 
            [Product_Title] =>  Value 
)
 [1] => Array
        (
            [Product_Main_category] =>  Value 
            [Product_Sub_category1] =>  Value 
            [Product_Sub_category2] =>  Value 
            [Product_Title] =>  Value 
            [Product_SKU] =>  Value 
            [Product_MODEL] =>  Value 
            [Product_manf_link] => Value 
            [Product_manf_Image_link] => Value 
)
 [2] => Array
        (
            [Product_Sub_category1] => Value 
            [Product_Title] =>  Value 
            [Product_SKU] =>  Value 
            [Product_MODEL] =>  Value 
            [Product_manf_link] => Value 
            [Product_manf_Image_link] => Value 
)

我想让所有子数组键都相同,就像一个子数组有额外的键,然后所有其他子数组必须有这些键但可以为空。

喜欢:

Array
(
    [0] => Array
        (
            [Product_Main_category] =>  
            [Product_Sub_category1] =>  
            [Product_Sub_category2] =>  
            [Product_Title] =>  Value 
            [Product_SKU] =>  Value 
            [Product_MODEL] =>  Value 
            [Product_manf_link] => Value 
            [Product_manf_Image_link] => 
)
 [1] => Array
        (
            [Product_Main_category] =>  Value 
            [Product_Sub_category1] =>  Value 
            [Product_Sub_category2] =>  Value 
            [Product_Title] =>  Value 
            [Product_SKU] =>  Value 
            [Product_MODEL] =>  Value 
            [Product_manf_link] => Value 
            [Product_manf_Image_link] => Value 
)
 [2] => Array
        (
           [Product_Main_category] =>  Value 
           [Product_Sub_category1] =>  Value 
           [Product_Sub_category2] =>  Value 
           [Product_Title] =>  
           [Product_SKU] =>  
           [Product_MODEL] =>  
           [Product_manf_link] => Value 
           [Product_manf_Image_link] => Value 
)

正在动态制作子数组我正在设置主数组中的这个

$array[] = $sub; 

也许在完成主阵列$array之后我们可以做到这一点?

谢谢。

请告诉我这是否可能重复,所以我可以自己关闭它而不是通过投票。

1 个答案:

答案 0 :(得分:1)

首先,您需要以某种方式累积所有键。我认为在构建数组时这样做会更好,但如果需要在之后完成,你可以使用类似的东西。

$all_keys = array_reduce($old_array, function($keys, $item){
  return array_merge($keys, array_keys($item));
}, array());

然后创建一个模板,其中包含唯一键的空值

$template = array_fill_keys(array_unique($all_keys), '');

您可以将模板应用于旧数组,以生成每个子数组包含所有相同键的模板。

$new_array = array_map(function ($item) use ($template) {
  return array_merge($template, $item);
}, $old_array);

如果您希望修改现有阵列而不是创建新阵列,可以这样做

array_walk($old_array, function(&$child, $key, $template){
  $child = array_merge($template, $child);
}, $template);