我是非常新的PHP&想在多维阵列下进行改造。这些数组我从JSON提交的表格中获得了许多名称' &安培; '值'但我需要散布一些价值观。在这里,我只给出了一个类似于我的工作的例子。
$formValues = array(
array(
'name' => 'name-agent-1',
'value' => 'austin'
),
array(
'name' => 'company-agent-1',
'value' => 'Samsung'
),
array(
'name' => 'phone-agent-1',
'value' => '889410'
),
array(
'name' => 'mail-agent-1',
'value' => 'abc@mail.com'
),
array(
'name' => 'name-agent-2',
'value' => 'Justin'
),
array(
'name' => 'company-agent-2',
'value' => 'Nokia'
),
array(
'name' => 'phone-agent-2',
'value' => '332100'
),
array(
'name' => 'mail-agent-2',
'value' => 'xyz@mail.com'
),
array(
'name' => 'name-agent-3',
'value' => 'stefen'
),
array(
'name' => 'company-agent-3',
'value' => 'Motorolla'
),
array(
'name' => 'phone-agent-3',
'value' => '8744520'
),
array(
'name' => 'mail-agent-3',
'value' => 'tyu@mail.com'
)
);
从上面的多维数组示例中,我想重新构建以下格式:
Array ( [1] => Array ( [name-agent-1] => austin [company-agent-1] => Samsung [phone-agent-1] => 889410 [mail-agent-1] => abc@mail.com ) [2] => Array ( [name-agent-2] => Justin [company-agent-2] => Nokia [phone-agent-2] => 332100 [mail-agent-2] => xyz@mail.com ) [3] => Array ( [name-agent-3] => stefen [company-agent-3] => Motorolla [phone-agent-3] => 8744520 [mail-agent-3] => tyu@mail.com ) )
我需要你最短的和最短的实现这一目标的最简单方法。请帮助和赞赏有意义的建议。 提前谢谢。
答案 0 :(得分:0)
一种可能的方法:
$mapped = array();
$group = 0; // assuming you indeed have to start indexing with 1, as in the question
foreach ($formValues as $i => $arr) {
if ($i % 4 === 0) {
$group++;
}
$mapped[$group][ $arr['name'] ] = $arr['value'];
}
Demo。这里没有什么真正复杂的:使用foreach
,您遍历源数组,使用键和值填充$mapped
一个,相应地从name
和value
获取。而且你有另一个属性 - $no
- 用于将这些元素分组为4。
在上面的代码中,我假设源数组总是具有相同的结构。如果不是,你将不得不在循环中进行额外的检查,从name
中提取组号:
$mapped = array();
foreach ($formValues as $arr) {
$name = $arr['name'];
if (preg_match('/(?<=-)\d+$/', $name, $m)) {
$mapped[ $m[0] ][$name] = $arr['value'];
}
}
答案 1 :(得分:0)
试试这个:
$out = array_reduce(
$formValues,
function (array $carry, array $item) {
$name = $item['name'];
$id = end(explode('-', $name));
if (! isset($carry[$id])) {
$carry[$id] = array();
}
$carry[$id][$name] = $item['value'];
return $carry;
},
array()
);
print_r($out);
代码使用'name'
作为分隔符,按'-'
的最后一个组件对输入值进行分组。输入值可以是任何顺序,其中一些可能丢失,并且没有请求拥有所有组的所有值。例如,如果缺少mail-agent-2
,则代码仍然有效,并按其ID正确分组其余值。