#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);
В качестве альтернативы вы можете использовать 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);