2012-06-22 7 views
0

У меня есть мульти двумерный массив какКак разделить многомерный массив PHP

$array = array ([0] => array ([0] => 'stack1', [1] => 'stack2'), 
       [1] => array ([0] => 'exchange1', [1] => 'exchange2'), 
     [2] => array ([0] => 'overflow1', [1] => 'overflow2'), 
     [3] => array ([0] => 'super1', [1] => 'super2') 
    ); 

Как я могу разделить массив, имеющий определенные слова, как «переполнение», я должен перенести его на два массива, как показано ниже. После этого я хочу петли.

$array1 = array ([0] => array ([0] => 'stack1', [1] => 'stack2'), 
       [1] => array ([0] => 'exchange1', [1] => 'exchange2'), 
      [2] => array ([0] => 'super1', [1] => 'super2') 
     ); 

$array2 = array ([0] => array ([0] => 'overflow1', [1] => 'overflow2')); 

Как я могу добиться этого с помощью PHP

+0

есть ли петля меньше способ сделать это – vvr

+0

@vvr: не очень ... Если PHP была функция, которая может найти частичные строки в массивах, может быть, но вы должны по крайней мере, петля для поиска совпадений ... По крайней мере, насколько мне известно. Однако мое решение показывает некоторые функции PHP, которые устраняют необходимость в некоторых циклах или устраняет необходимость в дополнительном коде внутри существующих циклов. – mseancole

ответ

0

Я продолжаю чувствовать, что я копирую Павла, второй раз мой ответ так близко напоминал его. Я обещаю, что я этого не делаю нарочно. Однако это другое, и, надеюсь, это делает трюк для вас.

$array2 = array(); 
foreach($array AS $key => $sub) { 
    foreach($sub AS $item) { 
     if(strpos($item, 'overflow') !== FALSE) { $array2[ $key ] = ''; } 
    } 
} 

$array2 = array_intersect_key($array, $array2); 
$array1 = array_diff_key($array, $array2); 
0
function array_find($needle, $haystack, $search_keys = false) { 
    if(!is_array($haystack)) return false; 
    foreach($haystack as $key=>$value) { 
     $what = ($search_keys) ? $key : $value; 
     if(strpos($what, $needle)!==false) return $key; 
    } 
    return false; 
} 

$word = 'overflow'; 
$c = count($array); 
for ($i=0; $i<$c; $i++) { 
    if (array_find($word, $array[$i])) { 
     $array2[] = $array[$i]; 
    } 
    else { 
     $array1[] = $array[$i]; 
    } 
} 

array_find() похож на array_search(), но он также работает для частичного совпадения.

+0

Это не сработает - в массиве никогда не бывает «переполнения» работы, поэтому оператор 'if' никогда не будет оцениваться. Вам нужно более свободное сравнение. – nickb

+0

Я заметил это сразу после того, как опубликовал его, но теперь он исправлен! – Jeroen

0
$search = 'overflow'; // set the search phrase 
foreach($array AS $sub) { 
    $final = 1; 
    foreach($sub AS $val) { 
    if (strpos($search,$val)) { $final = 2; } 
    } 
    ${'array'.$final}[] = $sub; 
} 
Смежные вопросы