1, "dogs" => 2, "fish" => 3);Как мне найти ключ с наименьшим значением? Здесь я бы искал cats.Есть ли какая-то встроенная функция PHP, котору" />

Нахождение ключа минимального значения в ассоциативном массиве

php associative-array

44106 просмотра

5 ответа

58746 Репутация автора

В PHP скажем, что у вас есть ассоциативный массив, подобный этому:

$pets = array(
    "cats" => 1,
    "dogs" => 2,
    "fish" => 3
);

Как мне найти ключ с наименьшим значением? Здесь я бы искал cats.

Есть ли какая-то встроенная функция PHP, которую я пропустил, которая делает это? Было бы также неплохо, если бы существовало решение, в котором несколько идентичных значений были бы одинаковыми, как показано ниже:

$pets = array(
    "cats" => 1,
    "dogs" => 1,
    "fish" => 2
);

Выше я бы не возражал, если бы он просто выводил тоже; catsили dogs.

Заранее спасибо.

Автор: Philip Morton Источник Размещён: 19.10.2009 12:15

Ответы (5)


2 плюса

4609 Репутация автора

$min_val = null;
$min_key = null;
foreach($pets as $pet => $val) {
  if ($val < $min_val) {
    $min_val = $min;
    $min_key = $key;
  }
}

Вы также можете перевернуть массив и отсортировать его по ключу:

$flipped = array_flip($pets);
ksort($flipped);

Тогда первый ключ - это минимум, а его значение - это ключ в исходном массиве.

Автор: Jeff Ober Размещён: 19.10.2009 12:20

92 плюса

215042 Репутация автора

Решение

array_keys твой друг:

$pets = array(
    "cats" => 1,
    "dogs" => 2,
    "fish" => 3
);
array_keys($pets, min($pets));  # array('cats')

PS : где-то на SO есть дуплекс ( maxвместо него min, но я его отчетливо помню).

Автор: SilentGhost Размещён: 19.10.2009 12:22

2 плюса

49646 Репутация автора

Могу попробовать посмотреть на них:

Автор: Phill Pafford Размещён: 19.10.2009 12:25

-2 плюса

13 Репутация автора

найти самое высокое значение

print max(120, 7, 8, 50);

возвращает -> 120

$array = array(100, 7, 8, 50, 155, 78);
print max($array);

возвращает -> 155

найти самое низкое значение

print min(120, 7, 8, 50);

возвращает -> 7

$array = array(50, 7, 8, 101, 5, 78);
print min($array);

возвращает -> 5

Автор: Rohit Suthar Mumbai Размещён: 21.12.2011 12:42

10 плюса

101 Репутация автора

Вот как я это сделал.

$pets = array(
    "cats" => 1,
    "dogs" => 2,
    "fish" => 3
);

array_search(min($pets), $pets); 

Надеюсь, это поможет

Автор: lexx Размещён: 29.05.2012 01:01
Вопросы из категории :
32x32