这是一个示例数组,将用于形成另一个数组:
$array = [
['name' => 'POST', 'value' => 'lorem ipsum 1'],
['name' => 'POST', 'value' => 'lorem ipsum 2'],
['name' => 'NOT_POST', 'value' => 'lorem ipsum 3'],
]
现在,生成的数组将基于上面的数组创建,如下所示:
$resultingArray = [
'POST' => [
['value' => 'lorem ipsum 1'],
['value' => 'lorem ipsum 2'],
],
'NOT_POST' => ['value => 'lorem ipsum 3']
]
我的问题是,当我为for
启动$resultingAraray
循环时,我无法找到一种方法来查看即将进行的迭代的键,以便创建{{1}然后将使用相同键的多个数组填充键,而不重复键(因为PHP会选择最后一个POST键)。
所以我的问题是:在开始添加POST
数组之前,如何确定不同阵列上有多个相同的name
个密钥?
显然我的数组有点复杂,但$resultingArray
密钥在所有这些密钥之间共享,就像在示例中一样。
答案 0 :(得分:0)
而不是for
使用foreach
:
foreach ($resultingArray as $key => $value) {
echo 'Under key ' . $key . ' you have: ';
print_r($value);
}
如果您对如何创建 $resultingArray
提出质疑,那么您应该说明更清楚。
$resultingArray = [];
foreach ($array as $item) {
if (empty($resultingArray[$item['name']])) {
$resultingArray[$item['name']] = [];
}
$resultingArray[$item['name']][] = ['value' => $item['value']];
}
答案 1 :(得分:0)
您可以使用foreach遍历$array
,存储name
密钥,检查$resultingArray
上是否存在密钥。如果没有,请将当前数组添加到其中,否则,添加一个级别以推送新的数组。
$array = [
['name' => 'POST', 'value' => 'lorem ipsum 1'],
['name' => 'POST', 'value' => 'lorem ipsum 2'],
['name' => 'NOT_POST', 'value' => 'lorem ipsum 3'],
];
$resultingArray = [];
foreach ($array as $item) {
// get the name
$name = $item['name'] ;
// remove name from array
unset($item['name']);
// if already exists,
if (isset($resultingArray[$name])) {
// transform as array
$resultingArray[$name] = [$resultingArray[$name]];
// and push the new one
$resultingArray[$name][] = $item ;
} else {
// store 'as value'
$resultingArray[$name] = $item;
}
}
print_r($resultingArray);
输出:
Array
(
[POST] => Array
(
[0] => Array
(
[value] => lorem ipsum 1
)
[1] => Array
(
[value] => lorem ipsum 2
)
)
[NOT_POST] => Array
(
[value] => lorem ipsum 3
)
)