2012-06-22 70 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; 
}