Проблема понимания поиска в 2d массиве в PHP - PullRequest
2 голосов
/ 19 апреля 2020

Вот простой двумерный массив с некоторыми значениями

$array[0][0] = 1;
$array[0][1] = 2;
$array[1][0] = 3;
$array[1][1] = 4;

Я хочу найти ключ элемента массива с наибольшим значением.

Это код, который возвращает ключ :

$index = array_search(max($array), $array);

Работает хорошо, но возвращает только «последнюю» часть ключа. Таким образом, в моем массиве элемент с максимальным значением (4) равен $ array [1] [1], поэтому $ index возвращает 1, который, как я понимаю, является ключом этого элемента, но как я могу узнать, является ли это элементом [0] [ 1] или [1] [1], поскольку оба этих элемента имеют ключ [1]? Как мне получить «полный» ключ ([1] [1]), так что и [1], и [1] в моем случае.

Я предполагаю, что что-то упущено в многомерном PHP Подобные массивы работают, и я надеюсь, что кто-то может помочь мне понять их.

Обновление # 2

Также теперь я еще больше путаюсь с max (). Я попытался

$array[0][0] = 5323;
$array[0][1] = 5346;
$array[0][2] = 5424;
$array[1][0] = 6000;
$array[1][1] = 5412;
$array[1][2] = 5543;
$array[2][0] = 5651;
$array[2][1] = 7000;
$array[2][2] = 5254;

var_dump(max($array));

, и он возвращает subbaray, который не имеет 7000 как один из результатов, как я ожидал. В конце концов, это максимальное значение в этом массиве, так что теперь я в полном замешательстве.

1 Ответ

0 голосов
/ 19 апреля 2020

В ваших примерах данных есть 8 индексов, половина из которых 1, поэтому получение 1 не является доказательством того, что что-то работает.

Давайте разделим ваш код:

max($array)

Поскольку $array является двумерным массивом, следуйте правилам :

  1. При наличии нескольких массивов различной длины max возвращает самое длинное

    $val = max(array(2, 2, 2), array(1, 1, 1, 1)); // array(1, 1, 1, 1)
    
  2. Сравнение нескольких массивов одинаковой длины слева направо

    $val = max(array(2, 4, 8), array(2, 5, 1)); // array(2, 5, 1)
    

Таким образом, вы получаете [3, 4], потому что 1 меньше 3 Пожалуйста, сравните:

$array[0][0] = 1;
$array[0][1] = 9999999;
$array[1][0] = 3;
$array[1][1] = 4;
print_r(max($array));
Array
(
    [0] => 3
    [1] => 4
)
$array[0][0] = 1;
$array[0][1] = 2;
$array[1][0] = 0;
$array[1][1] = 9999999;
print_r(max($array));
Array
(
    [0] => 1
    [1] => 2
)

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

...