2014-09-23 3 views
0

Мой первый массив игла: -в массиве для многомерного массива в PHP

$needle = Array 
(
    [2] => authenticated user 
    [3] => administrator 
    [13] => first keyword 
    [23] => second keyword 
    [33] => third keyword 
) 

Второй массив, где эта игла должна соответствовать многомерный массив: -

$hay = Array 
(
    [0] => Array 
     (
      [value] => first keyword 
     ) 

    [1] => Array 
     (
      [value] => second keyword 
     ) 

    [2] => Array 
     (
      [value] => tenth keyword 
     ) 

) 

Я надеясь, что если массив needle соответствует массиву hay, я должен стать правдой.

Я попытался использовать это, но он не работает: -

if (in_array(strtolower($hay), $needle)) { 
... 
} 

Спасибо.

+0

возможно дубликат [в \ _array() и многомерного массива] (http://stackoverflow.com/questions/4128323/in-array-and-multidimensional-array) – Thomas

+1

порядок стогу и иглы неправильно – mithunsatheesh

ответ

1
$needle = array 
(
    2 => 'authenticated user', 
    3 => 'administrator', 
    13 => 'first keyword', 
    23 => 'second keyword', 
    33 => 'third keyword' 
); 
$hay = array 
(
    0 => array 
     (
      'value' => 'first keyword' 
     ), 

    1 => array 
     (
      'value' => 'second keyword' 
     ), 

    2 => array 
     (
      'value' => 'tenth keyword' 
     ) 

); 

function check_array($array1, $array2){ 
    $result = array(); 
    foreach($array1 as $key => $val) { 
     if(isset($array2[$key])){ 
      if(is_array($val) && $array2[$key]){ 
       $result[$key] = check_array($val, $array2[$key]); 
      } 
     } else { 
      $result[$key] = $val; 
     } 
    } 

    return $result; 
} 
if (check_array($hay, $needle)) { 
    print_r($result); 
} 
1

К сожалению, PHP не допускает функцию in_array на размерных массивах muli. Вам нужно написать свою собственную функцию in_array_multi, которая выполняет итерацию всех элементов массива во всех измерениях.

<?php 

function in_array_multi($needle, $hay, $strict = FALSE) { 
    if (is_array($hay)) { 

     foreach ($hay as $hay2) { 
      $result = FALSE; 
      if (
       is_array($hay2) 
      ) { 
       if ($result = in_array_multi($needle, $hay2, $strict)) { 
        return $result; 
       } else { 
        continue; 
       } 
      } else if (is_array($needle)) { 
       if ($result = in_array_multi($hay2, $needle, $strict)) { 
        return $result; 
       } else { 
        continue; 
       } 
      } else if ($strict && $hay2 === $needle) { 
       return TRUE; 
      } else if (!$strict && $hay2 == $needle) { 
       return TRUE; 
      } 
     } 
    } 

    return FALSE; 
} 

$needle = Array 
(
    2 => "authenticated user", 
    3 => "administrator", 
    13 => "first keyword", 
    23 => "second keyword", 
    33 => "third keyword" 
); 

// Second array where this needle should be matched is a multi-dimensional array:- 

$hay = Array 
(
    0 => Array 
     (
      "first keyword" 
     ), 

    1 => Array 
     (
      "second keyword" 
     ), 

    2 => Array 
     (
      "tenth keyword" 
     ), 
); 

$lowerNeedle = array(); 
foreach ($needle as $k => $v) { 
    $lowerNeedle[] = strtolower($v); 
} 

if (in_array_multi($lowerNeedle, $hay) !== FALSE) { 
echo "The needle '" . implode(",", $needle) . "' has been found."; 
} else { 
    echo "Needle has not been found."; 
} 
Смежные вопросы