2009-12-03 43 views
0

我有一個數組,看起來像這樣PHP在array1推模式ARRAY2

array(7) { 
    [0]=> "hello,pat1" 
    [1]=> "hello,pat1" 
    [2]=> "test,pat2" 
    [3]=> "test,pat2" 
    [4]=> "foo,pat3" 
    [5]=> "foo,pat3" 
    [6]=> "foo,pat3" 
    .... 
} 

我想將其推入另一個數組所以數組2的輸出如下:

array(7) { 
    [0]=> "hello,pat1" 
    [1]=> "test,pat2" 
    [2]=> "foo,pat3" 
    [3]=> "foo,pat3" 
    [4]=> "foo,pat3" 
    [5]=> "hello,pat1" 
    [6]=> "test,pat2" 
    ..... 
} 

我想是推動他們在以下模式:1「PAT1」 1「PAT2」和3「PAT3」,並重復這一模式,每5元。

while (!empty($array1)) 
    $a = explode(",",$array1[$i]); 
    if($a[1]=='pat1' &&) 
    push && unset 
    elseif($a[1]=='pat2' &&) 
    push && unset 
    elseif($a[1]=='pat3' and < 5) 
    push && unset and reset pattern counter 
} 

這樣做的好方法是什麼?

任何想法將不勝感激。

+2

你能澄清你的問題稍微的迭代器?我不確定你在這裏做什麼。謝謝。 – Meep3D 2009-12-03 22:38:34

+0

我想是將它們推入另一陣列而不是在相同的順序ARRAY1,而是,推動第一元件作爲PAT1,第二元件作爲PAT2,和3種以上的元素作爲PAT3。這意味着1,1,3的「模式」將每5個元素重複一次,直到array1上的所有元素都消失爲止。希望這可以清除它 – 2009-12-03 22:54:12

回答

0

時間的一些有趣的Standard PHP Library :-)

<?php 
$array1 = array (
    "hello1,pat1", "hello2,pat1", "hello3,pat1", 
    "test1,pat2", "test2,pat2", 
    "foo1,pat3", "foo2,pat3", "foo3,pat3", 
    "foo4,pat3", "foo5,pat3", "foo6,pat3" 
); 

// "group by" patN 
$foo = array(); 
foreach($array1 as $a) { 
    // feel free to complain about the @ here ...to somebody else 
    @$foo[ strrchr($a, ',') ][] = $a; 
} 
// split pat3 into chunks of 3 
$foo[',pat3'] = array_chunk($foo[',pat3'], 3); 

// add all "groups" to a MultipleIterator 
$mi = new MultipleIterator(MultipleIterator::MIT_NEED_ANY); 
foreach($foo as $x) { 
    $mi->attachIterator(new ArrayIterator($x)); 
} 

// each call to $mi->current() will return an array 
// with the current items of all registered iterators 
foreach ($mi as $x) { 
    // "flatten" the nested arrays 
    foreach(new RecursiveIteratorIterator(new RecursiveArrayIterator($x)) as $e) { 
    echo $e, "\n"; 
    } 
    echo "----\n"; 
}