Найти конкретное значение в многомерном массиве - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь выполнить поиск цифры один [1] в многомерном массиве.Он работает с использованием стандартного массива [$ array_1], но не при наличии встроенных массивов [$ array_2] и [$ array_3].

В самом конце скрипта вы найдете то, что я пробовал.

Требуемое поведение:

Поиск для возврата значения, которое указывает, было ли найдено значение.Это хорошо с позицией индекса, альтернативно возвращая количество цифр или повторяющиеся числа найденных цифр.

Мой план состоит в том, чтобы переместить результат в переменную и проверить, является ли результат нулевым.Если ноль означает, что не найдено ни одного результата поиска.Я использую ноль, потому что ноль [0] может относиться к позиции индекса.

<pre>

<?php

$search_for_value = 1;

/**
 * ---------------------------------
 * Array.
 * ---------------------------------
 */

$array_1 = [3, 2, 1];

/**
 * ---------------------------------
 * Multidimensional arrays.
 * ---------------------------------
 */

/**
  *  Value 1 is exists in the array.
 */

$array_2 = [
        [2],
        [1]
];


echo ("-- array_2 ---\n\n");
print_r($array_2);

/**
 *  Value 1 is missing in the array.
 */

$array_3 = [
        [4],
        [5]
];

echo ("-- array_3 ---\n\n");
print_r($array_3);


/**
 * Functions
 */
 function find_value($search_for_value, $array_selected) {
     return(array_search($search_for_value, $array_selected));
 };


 /**
  * ---------------------------------
  * Searches
  * ---------------------------------
  */

 // Search for value in array_1

$array_selected = $array_1;

 print_r(
     find_value(
         $search_for_value, $array_selected
     )
 );

 // Search for value in array_2

 $array_selected = $array_2;

 print_r(                                               # <==== Not working.
     find_value(
         $search_for_value, $array_selected
     )
 );

?>

Ответы [ 2 ]

2 голосов
/ 13 июня 2019

Вы можете использовать in_array с оператором сплат,
Ниже для многомерных массивов

$temp = array_merge(...$array_2);
var_dump(in_array(2, $temp));
$temp = array_merge(...$array_3);
var_dump(in_array(2, $temp));

для одномерных массивов,

Вы можете напрямую проверить in_array($value_to_search, $array_1);

Я выставляю массив на уровень их значений, чтобы они сгладились.
Теперь я просто проверил с помощью in_array, существует ли он в массиве или нет.

Демо .

0 голосов
/ 13 июня 2019

Вот рекурсивная функция, которая возвращает логическое значение, указывающее, было ли найдено значение.Большая часть этой функции была взята из Recursive array_search .

/**
 * Returns a boolean indicating if the needle is found in the haystack.
 * @param $needle
 * @param $haystack
 * @return bool
 */
function find_value($needle, $haystack)
{
    foreach ($haystack as $key => $value) {

        if ($needle === $value || (is_array($value) && find_value($needle, $value) !== false)) {
            return true;
        }
    }

    return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...