数组合并:使用foreach?

时间:2015-09-07 08:02:57

标签: php arrays foreach array-merge

我有2个阵列:

$im=explode(",", $data['products']);
$imi=explode(",", $data['period']);

相关联:

$data['products'] = balon,globo,sesta
$data['period'] = 1,1,2

所以当我合并结果时:

Array ( [0] => DS Basic [1] => DS Pro [2] => DS Start [3] => 1 [4] => 1 [5] => 2 )

问题是我需要将它关联起来:

DS Basic = 1 , DS Pro = 1 , DS Start = 2

我正在使用array_merge($im,$imi)

如何使用foreach执行此操作? 我想这样:

Array ( [0] => DS Basic [1] => DS Pro [2] => DS Start)
Array ( [0] => 1 [1] => 1 [2] => 2 )

因此,当我使用它时,它可能就像

using foreach

DS basic has a period of 1

DS pro has a period of 1

DS start has a period of 2

4 个答案:

答案 0 :(得分:1)

您可以按如下方式修复合并后的结果:

$merged = array_merge($im,$imi);
$period = array();
// Loop through the merged items
foreach ($merged as $k=>$v) {
  // Check if the value is an integer
  if ((int)$v) {
    // Move this value to the period array
    $period[] = $v;
    // Remove it from the merged array
    unset($merged[$k]);
  }
}
// Reindex the merged array to revalue the keys
$merged = array_values($merged);
// Test the output
echo '<h1>Merged Array:</h1>';
echo '<pre>';
echo print_r($merged);
echo '</pre>';
echo '<h1>Excess Array:</h1>';
echo '<pre>';
echo print_r($period);
echo '</pre>';
exit;

答案 1 :(得分:1)

$merged = array();
if (count($im) != count($imi)) {
    print "custom merging is not possible...";
}
else {
    for($i=0 ; $i<count($im) ; $i++) {
        $merged[$im[$i]] = $imi[$i];
    }
}

答案 2 :(得分:1)

你可以做foreach

    $newArr = [];
    foreach($im $key => $val)
    {
        $newArr[] = [$val[0] => $imi[$key][0], $val[1] => $imi[$key][1], $val[2] => $imi[$key][2]];
    }
    print_r($newArr);

或者将它结合起来:

  $result = array_combine($im, $imi);

答案 3 :(得分:1)

您需要的是组合而非合并;)请查看array_combine 上的php手册。

请不要考虑您想要的结果将一组数据作为键(示例中的产品数组中的值),您不应该有重复的值,否则您将丢失它们