2009-12-03 5 views
0

У меня есть массив, который выглядит примерно такPHP толкая шаблон из array1 в массив2

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

+0

Я хочу, чтобы они вставляли их в другой массив, но не в том же порядке, что и массив1, но вместо этого нажимаем первый элемент как pat1, второй элемент как pat2 и еще 3 элемента в качестве pat3. Это означает, что «шаблон» 1,1,3 будет повторяться для каждых 5 элементов, пока не исчезнут все элементы массива. надеюсь, что это очистит –

ответ

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"; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^