2012-06-22 69 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

這不會起作用 - 數組中絕不會有'overflow'的確切工作,所以'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; 
}