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数组的吗?嗯。。?用我的手。它的结构与原始数组相同(只有我的数组没有数字键,直接编码)