Аналог PHP функции in_array для многомерного массива

Привет! Хочу поделиться очень полезной функцией, которую нашел недавно в сети. Данная функция рекурсивно проверяет наличие значения в многомерном массиве, аналогично функции in_array для одномерных массивов.

То есть, допустим у вас есть массив:

$array = array( array( 'a', 'b' ), array( 'c', 'd', 'e' ), 'f', 'g' );

И вы хотите проверить, содержит ли данный массив $array значение "d". В таком случае вам как раз поможет эта простая функция, код которой приведен ниже. Стандартная функция in_array в таком случае вам не поможет.

Код функции:

function in_multiarray( $e, $a )
{
 $t = sizeof( $a ) - 1;
 $b = 0;
 while($b <= $t)
 {
  if( isset( $a[ $b ] ) )
  {
   if( $a[ $b ] == $e )
    return true;
   else
   if( is_array( $a[ $b ] ) )
    if( in_multiarray( $e, ( $a[ $b ] ) ) )
     return true;
  }

  $b++;
 }

 return false;
}

Применение:

$array = array( array( 'a', 'b' ), array( 'c', 'd', 'e' ), 'f', 'g' );

if( in_multiarray( 'd', $array ) )
 echo 'элемент "d" есть в массиве';

Заметка: Данная функция не работает с ассоциативными массивами в некоторых случаях. Для такого типа массивов данную функцию нужно дополнить таким образом, чтобы ассоциативные индексы переводились в порядковые.

Успехов!

P.S. Если у вас есть тоже в запасе какие-то полезные функции, которые сильно облегчают жизнь, то если хотите, выкладывайте их в комментах ниже.

[ Прочитайте комменты ниже или напишите свой... ]

Ищете хостинг для своего сайта? Могу порекомендовать свой (нажмите здесь)

6 комментариев к “Аналог PHP функции in_array для многомерного массива”

  1. Vadim 07.02.2014 в 23:40 #

    Спасибо!

  2. WEBKIOSK 22.06.2014 в 15:36 #

    синтаксическая ошибка в 7 строке
    не хватает одной закрывающей скобки

    • Богдан 22.06.2014 в 19:57 #

      точно, спасибо большое вам за замечание! исправил

  3. Аноним 27.05.2015 в 13:15 #
    function check_in_array($e, $a)
    {
    	foreach($e as $item)
    	{
    		if($item == $a)
    		{
    			return true;
    		}
    	}
    	return false;
    }
    
  4. VaShu 18.12.2015 в 13:42 #
    function in_multiarray($e, $a)
    {
        foreach ($a as $item) {
            if (($item == $e) || ((is_array($item)) &amp;&amp; (in_multiarray($e, $item))) ) {
                return true;
            }
        }
    
        return false;
    }
    
    • Богдан 19.12.2015 в 09:43 #

      Спасибо за коммент! На данный момент это лучшее решение задачи 🙂