如何解决PHP-给定两个具有相同键的数组,将数组值连接到一个新数组中
|| 我有一个表单,可提交有关检查点的报告。每个检查点都有一个“状态”和一个“注释”。设置表单后,它将返回一个多维数组,其键为检查点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\"
}
执行此操作的最有效方法是什么?
解决方法
给定
$array
和$array2
两个数组
$result = array();
foreach( $array as $k=>$v ) {
$result[$k] = $v;
if (isset($array2[$k]))
$result[$k] .= \'-\' . $array2[$k];
}
print_r($result);
, 没有本机的PHP函数可以为您执行此操作(这将是最有效的)。只需遍历两个数组并开始收集。
一个代码示例将是侮辱性的,因此我省略了它。
, 给定问题中列出的$checkpoints
6。您可以使用:
$newCheckpoints = array();
foreach ($checkpoints[\'status\'] as $k => $status) {
$newCheckpoints[$k] = $status . (!empty($checkpoints[\"comment\"][$k]) ? \"-\'{$checkpoints[\'comment\'][$k]}\'\" : \'\');
}
, 首先以状态和注释递归合并数组,然后像这样粘贴两个部分:
$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\'],\'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
)
这可能是您想要的。
编辑:
我已经删除了检查,不管它是否是数组-我假设变量始终采用您提供给我们的格式,因此这不是必需的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。