php从另一个多维数组修改多维数组
我是PHP新手&我想改进一下多维数组。我从JSON提交的表单中得到的这些数组包含大量的“name”和“value”,但我需要分散一些值。这里我只举了一个与我的工作类似的例子php从另一个多维数组修改多维数组,php,arrays,Php,Arrays,我是PHP新手&我想改进一下多维数组。我从JSON提交的表单中得到的这些数组包含大量的“name”和“value”,但我需要分散一些值。这里我只举了一个与我的工作类似的例子 $formValues = array( array( 'name' => 'name-agent-1', 'value' => 'austin' ), array( 'name' => 'company-agent-1',
$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'
)
);
从上面的多维数组示例中,我想重新构建以下格式:
我需要你提供最短最简单的方法来实现这一点。请帮助并感谢有意义的建议。
提前感谢。一种可能的方法:
$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'];
}
。这里没有什么真正复杂的事情:使用foreach
,您迭代源数组,用键和值填充$mapped
一个,这些键和值取自name
和value
。您还有另一个属性-$no
,用于按4对这些元素进行分组
在上面的代码中,我假设源数组始终具有相同的结构。如果不是,则必须在循环中执行其他检查,从
名称中提取组号:
$mapped = array();
foreach ($formValues as $arr) {
$name = $arr['name'];
if (preg_match('/(?<=-)\d+$/', $name, $m)) {
$mapped[ $m[0] ][$name] = $arr['value'];
}
}
$mapped=array();
foreach($formValues作为$arr){
$name=$arr['name'];
如果(preg_)匹配('/(?请尝试以下操作:
$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正确地输入值。请看:这太棒了:)&它对我有效。我在这里有一个问题:if($I%4==0)
和&if($I%4==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);