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是问题中列出的array,您可以使用:

$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'], $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
)

这可能正是你想要的。

编辑:

我已经删除了检查,无论它是否是数组——我假设变量总是按照您给我们的格式,所以这不是必需的。

相关内容

  • 没有找到相关文章

最新更新