0

次のような多次元配列があります

$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')
     );

「オーバーフロー」などの特定の単語を含む配列を分割するにはどうすればよいですか。以下のように 2 つの配列にシフトする必要があります。その後、ループしたい。

$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を使用してこれを達成するにはどうすればよいですか

4

3 に答える 3

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 ()に似ていますが、部分一致にも機能します。

于 2012-06-22T14:04:52.063 に答える
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;
}
于 2012-06-22T14:06:37.677 に答える
0

私はポールをまねているような気がし続けます.2回目は私の答えが彼に非常によく似ていました. わざとそうしていないことを約束します。ただし、これは異なります。うまくいけば、これでうまくいくでしょう。

$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 );
于 2012-06-22T14:11:26.993 に答える