我有一个表单提交有关检查点的报告。每个检查点都有“状态”和“注释”。设置表单,以便返回一个多维数组,其中键是检查点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"
}
最有效的方法是什么?。
答案 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
)
这可能是你想要的。
修改强>
我删除了支票,无论是否是数组 - 我假设变量总是采用您给我们的格式,所以这不是必需的。