Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php从另一个多维数组修改多维数组_Php_Arrays - Fatal编程技术网

php从另一个多维数组修改多维数组

php从另一个多维数组修改多维数组,php,arrays,Php,Arrays,我是PHP新手&我想改进一下多维数组。我从JSON提交的表单中得到的这些数组包含大量的“name”和“value”,但我需要分散一些值。这里我只举了一个与我的工作类似的例子 $formValues = array( array( 'name' => 'name-agent-1', 'value' => 'austin' ), array( 'name' => 'company-agent-1',

我是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'
    )
);
从上面的多维数组示例中,我想重新构建以下格式:

我需要你提供最短最简单的方法来实现这一点。请帮助并感谢有意义的建议。 提前感谢。

一种可能的方法:

$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);