0

我有两个数组,我想将第二个数组拆分为第一个数组的值匹配的数组。

$arr1 = array(4, 6, 9, 14);
$arr2 = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);

foreach($arr1 as $val)
{
    $split_by = array_search($val, $arr2);
    if ($split_by) {
        $first = array_slice($arr2, 0, $split_by);
        $second = array_slice($arr2, $split_by + 1);

        echo var_dump($first);
    }

}

我想要像这样的数组

$newarr1 = Array ( [0] => 4 [1] => 6 [2] => 9 [3] => 14 ) 
$newarr2 = Array ( [0] => 5 ) 
$newarr3 = Array ( [0] => 7 [1] => 8 ) 
$newarr4 = Array ( [0] => 10 [1] => 11 [2] => 12 [3] => 14 )
$newarr5 = Array ( [0] => 15)  
4

3 回答 3

1

我相信这样的东西是你正在寻找的代码

$arr1 = array(4, 6, 9, 14);
$arr2 = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
$lastSplitBy = -1;
foreach($arr1 as $val)
{
    $split_by = array_search($val, $arr2);
    if ($split_by) {
        $first = array_slice($arr2, $lastSplitBy+1, $split_by-$lastSplitBy-1);
        echo var_dump($first);
        echo "<br>";
        $lastSplitBy = $split_by;
    }
}
if ($lastSplitBy > -1) {
    $first = array_slice($arr2, $lastSplitBy+1, count($arr2)-$lastSplitBy-1);
    echo var_dump($first);
    echo "<br>";
    $lastSplitBy = $split_by;
}

有输出

array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) } 
array(1) { [0]=> int(5) } 
array(2) { [0]=> int(7) [1]=> int(8) } 
array(4) { [0]=> int(10) [1]=> int(11) [2]=> int(12) [3]=> int(13) } 
array(1) { [0]=> int(15) } 

如您所见,首先它将数组从 0 拆分为 arr1 的第一个元素(0-4,不包括在内),然后从 4-6,不包括在内,等等,我将其设置为包括数组(即 1-3 和 15),你没有在你的数组中指定 1-3 但我想你可能想要那个;如果没有,它很容易删除

于 2013-06-24T12:29:41.233 回答
0

相信你的: $newarr4 = Array ( [0] => 10 [1] => 11 [2] => 12 [3] => 14 ) 实际上是: $newarr4 = Array ( [0] => 10 [1] => 11 [2] => 12 [3] => 13 )

这是解决方案:

$arr1   = array(4, 6, 9, 14);
$arr2   = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);

$tree   = array();
$i      = 0;
foreach($arr2 AS $index => $value) {
    if(in_array($value, $arr1) == true) {
        $i++;
    } else {
        $tree[$i][] = $arr2[$index];
    }


}

$tree[0]    = $arr1;
于 2013-06-24T12:51:26.097 回答
-1

编辑:假设是错误的,但如果有人需要,请保留以下代码:


假设$arr1是要拆分的索引集合$arr2

function split_arr($arr1,$arr2){
  $out=array();
  $part=0;
  for($i=0;$i<count($arr2);$i++){
    if(in_array($i,$arr1)) $part++;
    $out[$part][]=$arr2[$i];
  }
  return $out;
}
于 2013-06-24T12:31:29.693 回答