【问题标题】:Merge two array into one into chunks将两个数组合并为一个块
【发布时间】:2014-05-14 02:41:20
【问题描述】:

我有以下数组

$arr1 = array( 
           array('ctype'=>'fr', 'type'=>'fr'), 
           array('ctype'=>'fasdf', 'type'=>'fr'), 
           array('ctype'=>'fdfdf', 'type'=>'fr'), 
           array('ctype'=>'fhjdf', 'type'=>'fr'), 
           array('ctype'=>'fsf', 'type'=>'fr'), 
           array('ctype'=>'vndf', 'type'=>'fr'), 
           array('ctype'=>'fnsdf', 'type'=>'fr')
);

$arr2 = array( 
          array('ctype'=>'fr', 'type'=>'ln'), 
          array('ctype'=>'fasdf', 'type'=>'ln'), 
          array('ctype'=>'fayf', 'type'=>'ln'), 
          array('ctype'=>'fauf', 'type'=>'ln')
);

我想将此数组合并为一个,但合并为相差 2 之类的块

$main_arr = array(
              array('ctype'=>'fr', 'type'=>'fr'), 
              array('ctype'=>'fasdf', 'type'=>'fr'), 
              array('ctype'=>'fr', 'type'=>'ln'), 
              array('ctype'=>'fasdf', 'type'=>'ln'), 
              array('ctype'=>'fdfdf', 'type'=>'fr'), 
              array('ctype'=>'fhjdf', 'type'=>'fr'), 
              array('ctype'=>'fayf', 'type'=>'ln'), 
              array('ctype'=>'fauf', 'type'=>'ln')
              array('ctype'=>'fsf', 'type'=>'fr'), 
              array('ctype'=>'vndf', 'type'=>'fr'), 
              array('ctype'=>'fnsdf', 'type'=>'fr')
 );

如您所见,我想从 arr1 中获取 2 个值,然后从 arr2 中获取 2 个值,如果该值不存在于示例 $arr2 中,则从 $arr1 获取并推送值。我用array_chunksarray_map 尝试过,但无法达到预期。

这是我尝试过的:

// Divide foursome into chunks
$fr = array_chunk($arr1, 2);
$ln = array_chunk($arr2, 2);

// Can't provide the expected result
$main = array_map(NULL, $fr, $ln);

【问题讨论】:

标签: php arrays


【解决方案1】:

我认为你在追求这样的东西:

function combine($a1, $a2) {
    if (is_array($a2) && count($a2)) {
        $a1 = array_merge($a1, $a2);
    }
    return $a1;
}

$m = array_map('combine', $fr, $ln);

$main = array();
foreach ($m as $idx => $ars) {
    $main = array_merge($main, $ars);
}

首先要注意的是,传递给 array_map() 的数组数量必须与你的回调函数采用的参数数量相匹配。

要注意的第二点是“分块”为您的数组添加了一个新级别,因此您需要一些方法来“展平”组合两个“分块”数组的结果。

【讨论】:

  • 感谢清除逻辑。这正是我想要的。
猜你喜欢
  • 2021-07-16
  • 2012-11-19
  • 1970-01-01
  • 2019-08-30
  • 2011-06-02
  • 2022-01-10
  • 1970-01-01
  • 2023-03-26
相关资源
最近更新 更多