PHP:从多维数组创建二维数组,其值为键

时间:2017-08-16 18:11:20

标签: php multidimensional-array

我尝试从复杂的数组创建一个新数组。 如果没有简单的解决方案,每个提示都有助于搜索更成功。

我有这个复杂的数组(缩短了很多)并且想要构建一个新的二维数组:

array (
    [key1] => value1
    [key2] => value2
    [category] => array (
        [key3] => value3
        [key4] => array (
            [small] => value6
            [large] => value7 
            )
        [items] => array (
            [0] => array (
                [aTag] => #PU2RRL
                [name] => 3PL
                [position] => 25
                [versions] => array (
                    [0] => array (
                        [bTag] => #KF67RL
                        [color] => blue
                        [id] => 001
                        )
                    [1] => array (
                        [bTag] => #Z8TR4
                        [color] => red
                        [id] => 002
                        )
                )
            )
            [1] => array (
              ...

这是我要创建的数组:

array(
  [001] => array (
    [aTag] => #PU2RRL
    [name] => 3PL
    [position] => 25
    [bTag] => #KF67RL
    [color] => blue
  )
  [002] => array (
    [aTag] => #PU2RRL
    [name] => 3PL
    [position] => 25
    [bTag] => #Z8TR4
    [color] => blue))

使用ID作为键和此值:

$itemAll = array(
  $array[category][items][0][versions][0][id]  => array(
    "aTag" => $array[category][items][0][aTag],
    "name" =>  $array[category][items][0][name],
    "position" =>  $array[category][items][0][position],
    "bTag" => $array[category][items][0][versions][0][bTag],
    "color" => $array[category][items][0][versions][0][color],
  )
);

我不知道如何使用foreach循环为" items"创建此数组。和ID作为主键的版本,任何提示?

编辑:非常感谢@DeeDuu!因为我有多个项目,所以我添加了另一个foreach:

$new_array = array();
// i have multiple items, so I removed [0]:
$items = $array["category"]["items"];
// added another foreach
foreach ($items as $item) {
  // changed $items to $item
  $shared_properties = array(
  "aTag" => $item["aTag"],
  "name" => $item["name"],
  "position" => $item["position"]
  );
  // changed $items to $item
  foreach ($item["versions"] as $version) {
  $specific_properties = array(
      "bTag" => $version["bTag"],
      "color" => $version["color"]
  );
  $new_entry = array_merge(
      $shared_properties,
      $specific_properties
  );
  $new_array[$version["id"]] = $new_entry;  }}

1 个答案:

答案 0 :(得分:0)

如果我理解了你想要的东西,那么下面的东西应该可行。

 // This is the target array where we will save the recombinated data
 $new_array = array();

 // Store the relevant subarray in a new variable;
 // This makes the subsequent code shorter
 $items = $array["category"]["items"][0];

 // This gives the data that will be common to all the new entries,
 // for all versions seem to share aTag, name and position
 $shared_properties = array(
     "aTag" => $items["aTag"],
     "name" => $items["name"],
     "position" => $items["position"]
 );

 // Alright, let's loop over the versions
 foreach ($items["versions"] as $version) {
     // Another array for the data that is specific
     // to the version we're currently looking at
     $specific_properties = array(
         "bTag" => $version["bTag"],
         "color" => $version["color"]
     );

     // The new entry is a combination of the shared and the
     // specific properties; array_merge will do that for us
     $new_entry = array_merge(
         $shared_properties,
         $specific_properties
     );

     // Now add to the new array
     $new_array[$version["id"]] = $new_entry;
 }