PHP - 给定两个具有相同键的数组,将数组值连接成一个新数组

时间:2011-06-11 13:22:25

标签: php arrays multidimensional-array concatenation

我有一个表单提交有关检查点的报告。每个检查点都有“状态”和“注释”。设置表单,以便返回一个多维数组,其中键是检查点ID,如下所示:

array(3) {
  ["status"]=>
  array(2) {
    ["000046"]=>
    string(1) "S"
    ["000047"]=>
    string(1) "S"
  }
  ["comment"]=>
  array(2) {
    ["000046"]=>
    string(6) "Flarg."
    ["000047"]=>
    string(0) ""
  }
  ["submit"]=>
  string(13) "SUBMIT REPORT"
}

在上文中,检查点000046的状态为“S”,注释为“Flarg。”

我想要做的是创建一个新数组,以特定格式将两个值连接在一起,同时保留键。最后阶段应该是这样的:

array(1) {
  ["000046"]=>
  string(10) "S-'Flarg.'"
  ["000047"]=>
  string(1) "S"
}

最有效的方法是什么?。

4 个答案:

答案 0 :(得分:1)

给出$array$array2两个数组

$result = array();
foreach( $array as $k=>$v ) {
  $result[$k] = $v;
  if (isset($array2[$k]))
    $result[$k] .= '-' . $array2[$k];
}
print_r($result);

答案 1 :(得分:0)

没有本地PHP函数可以为您执行此操作(这将是最有效的)。只需遍历两个数组并开始收集。

代码示例是侮辱性的,所以我省略了它。

答案 2 :(得分:0)

如果$checkpoints为您问题中列出的array,则可以使用:

$newCheckpoints = array();
foreach ($checkpoints['status'] as $k => $status) {
    $newCheckpoints[$k] = $status . (!empty($checkpoints["comment"][$k]) ? "-'{$checkpoints['comment'][$k]}'" : '');
}

答案 3 :(得分:0)

首先使用状态和注释递归地合并数组,然后将这两个部分粘合在一起:

$output = array_merge_recursive($array['status'], $array['comment']);
array_walk($output, function (&$value, $key) { $value = empty($value[1]) ? $value[0] : $value[0]."-'".$value[1]."'"; });

但这只适用于5.3或更高版本的PHP。要在较低版本的PHP中执行相同操作,您应首先创建函数,然后传递其名称:

function gluecomments(&$value, $key) { $value = empty($value[1]) ? $value[0] : $value[0]."-'".$value[1]."'"; }
$output = array_merge_recursive($array['status'], $array['comment']);
array_walk($output, 'gluecomments');

<强>证明:

对于此输入:

$array = array(
    'status' => array(
        '000046' => 'S',
        '000047' => 'S',
    ),
    'comment' => array(
        '000046' => 'Flarg.',
        '000047' => '',
    ),
    'submit' => 'SUBMIT REPORT',
);

print_r($output)打印了以下内容:

Array
(
    [000046] => S-'Flarg.'
    [000047] => S
)

这可能是你想要的。

修改

我删除了支票,无论是否是数组 - 我假设变量总是采用您给我们的格式,所以这不是必需的。