我在PHP中非常新&想在多维数组下面进行修改。这些数组是从JSON提交的具有大量“name”&“value”的表单中得到的,但是我需要分散几组值。在这里,我只举了一个与我的工作相似的例子。
$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'
)
);从上面的多维数组示例中,我想重新构建以下格式:
阵列(1 =>阵列(名称-代理-1 =>奥斯汀公司-代理-1 =>三星电话代理-1 => 889410邮件代理-1 => abc@mail.com )2 =>阵列(名称代理-2 => Justin公司-代理-2 =>诺基亚电话代理-2 => 332100邮件代理-2 => xyz@mail.com )3 =>阵列(名称代理-3 => stefen公司-agent-3 => Motorolla电话代理-3 => 8744520邮件代理-3 => tyu@mail.com )
我需要你的最短和最简单的方法来实现这一点。请帮助并欣赏这个有意义的建议。提前谢谢。
发布于 2014-12-13 14:07:32
一种可能的办法是:
$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'];
}
}发布于 2014-12-13 14:50:05
试试这个:
$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正确地对其余的值进行分组。
https://stackoverflow.com/questions/27459617
复制相似问题