我有一个像这样的二维数组:
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
之后我们可以做到这一点?
谢谢。
请告诉我这是否可能重复,所以我可以自己关闭它而不是通过投票。
答案 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);