首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php从另一个多维数组中改进多维数组

php从另一个多维数组中改进多维数组
EN

Stack Overflow用户
提问于 2014-12-13 14:01:56
回答 2查看 44关注 0票数 1

我在PHP中非常新&想在多维数组下面进行修改。这些数组是从JSON提交的具有大量“name”&“value”的表单中得到的,但是我需要分散几组值。在这里,我只举了一个与我的工作相似的例子。

代码语言:javascript
复制
$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 )

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-13 14:07:32

一种可能的办法是:

代码语言:javascript
复制
$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数组,并相应地从namevalue获取。还有另一个属性$no,用于将这些元素按4分组。

在上面的代码中,我假设源数组总是具有相同的结构。如果不是,则必须在循环中执行其他检查,从name中提取组号

代码语言:javascript
复制
$mapped = array();
foreach ($formValues as $arr) {
  $name = $arr['name'];
  if (preg_match('/(?<=-)\d+$/', $name, $m)) {
    $mapped[ $m[0] ][$name] = $arr['value'];
  }
}
票数 0
EN

Stack Overflow用户

发布于 2014-12-13 14:50:05

试试这个:

代码语言:javascript
复制
$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正确地对其余的值进行分组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27459617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档