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

Php 在以下情况下,如何创建关联数组?,php,arrays,multidimensional-array,associative-array,Php,Arrays,Multidimensional Array,Associative Array,我有几个数组,如下所示。实际上,我有太多这样的数组,但为了供您参考,我只打印了其中的几个: Array ( [0] => lineItemData [1] => name ) Array ( [0] => lineItemData [1] => startDate ) Array ( [0] => lineItemData [1] => endDate ) Array ( [0] => lineIt

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

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]
是常见的,并且它存在于oth索引中。现在我想创建一个新数组,其中键应该是
[lineItemData]
,其他数组中没有值
[lineItemData]
,它们应该是新键,其他键应该是每个键下的键。我的问题可能会把你弄糊涂。因此,我正在打印低于所需的输出数组

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

        )
    [orderId] => 
    [isExternal] => 

)
也许是这样

    <?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
语句中实现这一点。我喜欢这一点,因为它更容易管理。

您可以通过以下方式完成:

$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
}

那么数组中的值呢?从何而来?(在您的结果示例中,您只有密钥,这是不正确的)@AlmaDo:实际上,我想用我所说的密钥构建上面的数组。然后,我将从表单中为其赋值。但是在分配值之前,我需要准备好这个数组结构。所以你不关心值(至少在创建时)?@AlmaDo:是的,在创建所需的数组结构之前,我不担心值。实际上,首先我希望逻辑能够动态工作。也就是说,它应该能够首先找到在许多数组中常见的第0个键,然后找到创建后续键/数组的逻辑。您上面编写的逻辑用于数组的静态操作。请使用
$super[]
而不仅仅是
$super
。我想这就是你要找的。示例:
$super['lineItemData']['endDate']=NULL
另一个选项将其添加到流行的
$super
中,然后将多维数组添加到另一个变量中以将其堆叠起来:
$stack[]=$super
:您能解释一下您在回答开始时是如何创建$data数组的吗?嗯。。?用我的手。它的结构与原始数组相同(只有我的数组没有数字键,直接编码)