我正在度过这段艰难的时光我现在已经挣扎了几个小时。有人可以帮帮我吗?我添加了fiddle。
我相信我的问题出现在这个字符串中:
$$salesAndOwner[$i]["$salesAndOwner[$i]".$l] = $salesAndOwner[$i.$l][$param] = $values[$l];
基本上我有以下多维数组:
[sales] => Array
(
[FirstName] => Array
(
[0] => salesFirst1
[1] => salesFirst2
)
[LastName] => Array
(
[0] => salesLast1
[1] => salesLast2
)
)
[decisionmaker] => Array
(
[FirstName] => Array
(
[0] => dmFirst1
[1] => dmFirst2
)
[LastName] => Array
(
[0] => dmLast1
[1] => dmLast2
)
)
)
我需要对此进行重组,就像我使用以下数组一样:
Array
(
[additionallocations0] => Array
(
[Address] => Address1
[State] => State1
)
[additionallocations1] => Array
(
[Address] => Address2
[State] => State2
)
)
以下是原文:
Array
(
[additionallocations] => Array
(
[Address] => Array
(
[0] => Address1
[1] => Address2
)
[State] => Array
(
[0] => State1
[1] => State2
)
)
这是我重组上述数组的方式:
if(isset($_POST['additionallocations'])) {
$qty = count($_POST['additionallocations']["Address"]);
for ($l=0; $l<$qty; $l++)
{
foreach($_POST['additionallocations'] as $param => $values)
{
$additional['additionallocations'.$l][$param] = $values[$l];
}
}
这就是我用于sales and decisionmaker
数组的内容。如果您注意到我有一个包含sales
和decisionmaker
的数组。我希望能够通过添加其主要数组名称来排序任何未来的数组。我觉得我已接近解决我的问题,但我无法让它产生正确的。
$salesAndOwner = array(0 => "sales", 1 => "decisionmaker");
for($i = 0; $i < 2; $i++){
$qty = count($_POST[$salesAndOwner[$i]]["FirstName"]);
for ($l=0; $l<$qty; $l++)
{
foreach($_POST[$salesAndOwner[$i]] as $param => $values)
{
$$salesAndOwner[$i]["$salesAndOwner[$i]".$l] = $salesAndOwner[$i.$l][$param] = $values[$l];
}
}
}
在上面的代码中,我将“sales”硬编码到变量中我需要它来动态生成包含sales0
decisionmaker0
和sales1
decisionmaker1
数组的变量名称所以$sales
和$decisionmaker
我希望这有意义,如果您需要更多信息请告诉我
答案 0 :(得分:1)
尝试
$result =array();
foreach($arr as $key=>$val){
foreach($val as $key1=>$val1){
foreach($val1 as $key2=>$val2){
$result[$key.$key2][$key1] = $val2;
}
}
}
请参阅演示here
答案 1 :(得分:1)
$salesAndOwner = array("sales", "decisionmaker");
$result = array();
foreach ($salesAndOwner as $key) {
$group = $_POST[$key];
$subkeys = array_keys($group);
$first_key = $subkeys[0];
foreach ($group[$first_key] as $i => $val) {
$prefix = $key . $i;
foreach ($subkeys as $subkey) {
if (!isset($result[$prefix])) {
$result[$prefix] = array();
}
$result[$prefix][$subkey] = $val;
}
}
}
答案 2 :(得分:1)
让我们分解吧。 Using friendly variable names and spacing will make your code a lot easier to read
记住。语法适用于您以便轻松阅读和理解。 (甚至不仅仅是你,但也许是未来的开发人员!)
所以你有一组人。每个组都包含一组属性。每个属性行都包含许多属性值。
PHP's foreach是一种很好的迭代方法,因为你需要迭代(并使用)数组的索引名称:
<?php
$new_array = array();
// For each group:
foreach($original_array as $group_name => $group) {
// $group_name = e.g 'sales'
// For each attribute in this group:
foreach($group as $attribute_name => $attributes) {
// $attribute_name = e.g. 'FirstName'
// For each attribute value in this attribute set.
foreach($attributes as $row_number => $attribute) {
// E.g. sales0
$row_key = $group_name . $row_number;
// if this is the first iteration, we need to declare the array.
if(!isset($new_array[$row_key])) {
$new_array[$row_key] = array();
}
// e.g. Array[sales0][FirstName]
$new_array[$row_key][$attribute_name] = $attribute;
}
}
}
?>
有了这样说,如果没有充分的验证,这种转换可能会导致意想不到的结果。
确保输入数组有效(例如,每个属性组每组具有相同的行数),您应该没问题。