在以下情况下如何创建关联数组


How to create an associative array in following case?

我有几个数组,如下所示。事实上,我有太多这样的数组,但为了供您参考,我只打印了其中的几个:

Array
(
    [0] => lineItemData
    [1] => name
)
Array
(
    [0] => lineItemData
    [1] => startDate
)
Array
(
    [0] => lineItemData
    [1] => endDate
)
Array
(
    [0] => lineItemData
    [1] => frequencyCapping
    [2] => interval
)
Array
(
    [0] => lineItemData
    [1] => frequencyCapping
    [2] => amount
)
Array
(
    [0] => orderId
)
Array
(
    [0] => isExternal
)

现在您可以观察到,在上述数组中,键值[lineItemData]是常见的,并且存在于其他索引中。现在我想创建一个新的数组,其中键将是[lineItemData],而其他本身没有值[lineItemData]的数组应该是新的键,其他键应该是每个键下的键。我的问题可能会使你感到困惑。所以我在想要的输出阵列下面打印

Array
(
    [lineItemData] => Array
        (
            [name] => 
            [startDate] => 
            [endDate] =>
            [frequencyCapping] => Array
            (
                [interval] => 
                [amount] => 
            )   
        )
    [orderId] => 
    [isExternal] => 
)

您可以使用:

$data = [
   ['lineItemData', 'name'],
   ['lineItemData', 'startDate'],
   ['lineItemData', 'endDate'],
   ['lineItemData', 'frequencyCapping', 'interval'],
   ['lineItemData', 'frequencyCapping', 'amount'],
   ['orderId'],
   ['isExternal']
];
$result  = [];
$pointer = &$result;
foreach($data as $keys)
{
   foreach($keys as $key)
   {
      if(is_array($pointer) && !array_key_exists($key, $pointer))
      {
         $pointer[$key] = null;
      }
      $pointer = &$pointer[$key];
   }
   $pointer = &$result;
}

最终结果看起来像:

array(3) {
  ["lineItemData"]=>
  array(4) {
    ["name"]=>
    NULL
    ["startDate"]=>
    NULL
    ["endDate"]=>
    NULL
    ["frequencyCapping"]=>
    array(2) {
      ["interval"]=>
      NULL
      ["amount"]=>
      NULL
    }
  }
  ["orderId"]=>
  NULL
  ["isExternal"]=>
  NULL
}

也许是这样?

    <?php
    $super['lineItemData']['name'] = NULL;
    $super['lineItemData']['startDate'] = NULL;
    $super['lineItemData']['endDate'] = NULL;
    $super['lineItemData']['frequencyCapping']['interval'] = NULL;
    $super['lineItemData']['frequencyCapping']['amount'] = NULL;
    $super['orderId'] = NULL; 
    $super['isExternal'] = NULL; ?>

我相信有人会变得狡猾,并在一个array声明中找到实现这一点的方法。我喜欢这个,因为它对我来说更容易管理。