2013-06-24 60 views
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) 
+1

有谁请解释所有的阵列之间的关系?我不明白。 – Voitcus

+0

同样在这里... xD – Brewal

+0

你的第一个数组不应该[1,2,3]? newarr4真的包含14吗? – Adrian

回答

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) } 

当你的代码可以看到,首先它将阵列拆分m 0到arr1的第一个元素(0-4,不包括),然后是4-6,不包括在内,等等,并且我将它设置为包括数组的开始/结束(即, 1-3和15),你没有在你的身上指定1-3,但我认为你可能会这么想;如果不是,它会很容易去除

+0

为什么你排除“分隔符”? – nonchip

+0

现在明白了。假设提问者的$ newarr1是错误的,你的代码工作正常。 – nonchip

+0

@nonchip是的,因为排除分隔符使它匹配他的最好,lol:P –

-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; 
} 
+0

我不认为arr1是一组索引;也许这是他出错的一部分,但他的代码搜索第二个数组的VALUES,而不是仅仅通过索引修剪(注意他使用array_search) –

+0

是的,但是不会产生像'((1,2 ,3),(4,5),(6,7,8),(9,10,11,12,13),(14))'? – nonchip

0

Believeing您: $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; 
相关问题