функция in_array не работает

#php #arrays

#php #массивы

Вопрос:

Этот код должен возвращать TRUE значение:

 <?php
      $return = in_array(array(1, 2), array(1, 2));
?>
  

но in_array возвращает FALSE.

Комментарии:

1. Но нет массива, содержащего массив and со значениями 1 и 2 в другом?

2. учитывая, что вы довольно новичок, взгляните на ответы и выберите то, что, по вашему мнению, является лучшим.

3. У меня есть два массива, первый (1, 2, 3, 4, 5) и, во-вторых (1, 4), я хочу проверить, находятся ли элементы из второго массива в первом. Как это сделать простым способом?

Ответ №1:

in_array проверяет, существует ли значение в массиве.

Ваша $needle функция вообще не существует как значение $haystack

это было бы нормально, если бы ваш $haystack был

 array(1,2,3,array(1,2))
  

Уведомление в этом случае array(1,2) фактически находится внутри, как и ожидалось

Если вы хотите проверить, когда 2 массива равны, я предлагаю вам === оператор

 ($a === $b) // TRUE if $a and $b have the same key/value pairs in the same order and of the same types.
  

Ответ №2:

Основываясь на вашем примере, вы можете захотеть заглянуть в array_intersect(). Она сравнивает массивы таким образом, который может лучше соответствовать вашей спецификации.

Ответ №3:

Согласно руководству по PHP для in_array , синтаксис функции:

 bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
  

Итак, вам нужно указать $needle значение в качестве первого аргумента. Это объясняет, почему ваш пример возвращает FALSE . Однако каждый из этих примеров вернет значение TRUE:

 in_array(1, array(1, 2));
in_array(2, array(1, 2));
in_array(array(1, 2), array(1, 2, array(1, 2)))
  

Тем не менее, это может помочь, если вы точно объясните, что вы пытаетесь сделать. Возможно, in_array это не та функция, которая вам нужна.

Ответ №4:

Ваш первый массив не содержится во втором массиве, он равен.

Это возвращает true:

 var_dump(in_array(array(1, 2), array(1, 2, array(1, 2))));
  

Ответ №5:

Вас интересует пересечение?

 $arr1 = array(1, 2);
$arr2 = array(1, 2);

$return = array_intersect($arr1, $arr2);

if(count($return) === count($arr1)) {
    // all are present in arr2
}
  

Ответ №6:

Первый параметр — это значение, которое вы ищете во втором параметре (массиве) http://php.net/manual/fr/function.in-array.php

Ответ №7:

вы не понимаете in_array смотрите Официальные документы:http://uk.php.net/in_array

 <?php
$a = array(array('p', 'h'), array('p', 'r'), 'o');

if (in_array(array('p', 'h'), $a)) {
    echo "'ph' was foundn";
}

if (in_array(array('f', 'i'), $a)) {
    echo "'fi' was foundn";
}

if (in_array('o', $a)) {
    echo "'o' was foundn";
}
?>
  

Ответ №8:

массив (1,2) находится не в массиве (1,2), а в массиве (1,2),

$return = in_array(array(1, 2), array(array(1, 2)));

вернул бы значение true. (скорее продолжение ответа yes123)

Ответ №9:

если второй массив выглядит следующим образом

 array(array(1, 2));
  

затем верните true

Ответ №10:

В вашем случае первым параметром in_array должен быть не массив, а целое число. То, что вы делаете с этим кодом, проверяет наличие массива внутри массива, которого там нет. Правильная форма была бы:

 in_array(1, array(1, 2)); // true
  

Комментарии:

1. это не так. Вы можете проверить наличие вложенного массива с помощью in_array. Я объяснил это в своем ответе

2. Это верно для представленного здесь случая, в котором пользователь ищет целое число внутри массива.