Как получить имя многомерного массива?

#php #arrays

#php #массивы

Вопрос:

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

В частности, я хочу получить самые высокие и самые низкие значения в моем массиве для определенного ключа, как только у меня будут эти значения, мне нужно будет получить имя массива, содержащего эти значения.

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

 Array
(
[123456] => Array
    (
        [value1] => 0.524
        [value2] => 0.898
        [value3] => -6.543
    )

[246810] => Array
    (
        [value1] => 0.579
        [value2] => 0.989
        [value3] => -5.035
    )
  

Я получил максимальное значение, используя этот код —

 max(array_column($statsArr, 'value1'));
  

Это, правильно, дает мне значение «0.579». Теперь мне нужно получить значение массива, содержащего эту информацию, поэтому в этом случае я также хочу получить значение «246810». Я не знаю, как это сделать, хотя буду признателен за любую помощь!

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

1. Если существует несколько массивов с одинаковым максимальным значением, какой из них вы хотите получить?

2. @apokryfos В таком случае, только первое.

3. Выполните итерацию по вашему массиву с помощью простого foreach, без каких-либо array_ функций.

4. Можете ли вы отобразить свой сгенерированный код массива.

Ответ №1:

Выполните итерацию по вашему массиву с помощью простого foreach и сохраните требуемый ключ:

 $max = 0;
$founded_key = false;
foreach ($array as $key => $value) {
    if ($max < $value['value1']) {
        $max = $value['value1'];
        $founded_key = $key;
    }
}

echo $founded_key, ' - ', $max;
  

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

1. Psst.. что, если максимальное значение отрицательно?

2. Затем начните с PHP_INT_MIN или первого элемента $array .

Ответ №2:

Для такого рода задач мне нравится использовать array_reduce . max сама по себе операция уменьшения массива, которая принимает массив и возвращает единственное значение, PHP просто предлагает ее из коробки для удобства, поскольку это очень распространенная операция.

Вот пример кода:

 $array = array(
    123456 => array(
        'value1' => 0.524,
        'value2' => 0.898,
        'value3' => -6.543
    ),

    246810 => array(
        'value1' => 0.579,
        'value2' => 0.989,
        'value3' => -5.035
    )
);

$maxKey = array_reduce(array_keys($array), function ($carry, $key) use ($array) {
     if ($carry === null) {
        return $key;
     }
     return $array[$key]['value1'] > $array[$carry]['value1'] ? $key : $carry;
}, null);
$maxValue = $array[$maxKey]['value1'];
  

Рабочий пример:http://sandbox.onlinephpfunctions.com/code/ecd400ffec91a6436c2fb5ee0410658e22772d4b

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

1. @MD.JubairMizan === Закария?

Ответ №3:

 function getMax($array, $field) {
  $maxValue = null;
  $maxKey = null;
  foreach($array as $key => $content) {
    if (is_null($maxValue) || $content[$field] > $maxValue) {
      $maxValue = $content[$field];
      $maxKey = $key;
    }
  }
  return [$maxValue, $maxKey];
}
  

Ответ №4:

Вы можете выполнить поиск максимального значения в array_column.
Сначала я готовлю array_column с правильными ключами, комбинируя их, затем нахожу максимальное значение, как вы делаете.

Затем мы можем array_search значение.

 $value1 = array_combine(array_keys($statsArr), array_column($statsArr, 'value1'));

$max = max($value1);
echo $max . PHP_EOL;

$array = $statsArr[array_search($max, $value1)];
var_dump($array);
  

https://3v4l.org/Q9gOX


В качестве альтернативы вы можете использовать array_values в $statsArr, чтобы сделать его 0 индексированным точно так же, как array_column.

 $value1 = array_column($statsArr, 'value1');

$max = max($value1);
echo $max . PHP_EOL;

$array = array_values($statsArr)[array_search($max, $value1)];
var_dump($array);