2013-06-24 158 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; 
相關問題