|
|
|
| Добрый день уважаемые форумчане. Помогите с решением задачки.
Есть массив
Ключ Значение
534 => 12
121 => 10
453 => 8
432 => 5
123 => 5
656 => 5
Мне нужно вывести через цикл 4 записи из этого массива, выводить по убыванию
12, 10, 8, 5
Сохраняя ключи, но 4ртый элемент который имеет неуникальное значение нужно выводить рандомно из возможных вариантов:
432 => 5
123 => 5
656 => 5
Одно из них....
Помогите пожалуйста! | |
|
|
|
|
|
|
|
для: TanTaL91
(07.02.2011 в 10:56)
| | А соотношение всегда такое - первые три значения уникальны, а последнее повторяется. Или эти параметры могут изменяться? | |
|
|
|
|
|
|
|
для: TanTaL91
(07.02.2011 в 10:56)
| | Так вы же выводите значения, а не ключи массива, тогда какая разница какого ключа вы возьмете значение 5? Если бы вам нужно было отобразить тот или ной ключ, из набора ключей имеющих одинаковые значения, тогда да.
Функция array_count_values() вернет вам количество значений в массиве. По этому массиву вы можете получить из исходнога массива два массива (функциями пересечения массивов) - имеющего только уникальные значения и имеющего одинаковые значения. Далее разложите так как вам надо. Если конечно ключ, в конечном счете, и нужен. | |
|
|
|
|
|
|
|
для: sim5
(07.02.2011 в 11:37)
| | Вот имено что мне важны имено ключи и их значения... По поводу значений и их порядка, они всегда разные... | |
|
|
|
|
|
|
|
для: TanTaL91
(07.02.2011 в 17:32)
| | Сортировка вам поможет для порядка. А далее, как и говорилось.
<?
$a = array(
534 => 12,
121 => 10,
453 => 8,
432 => 5,
123 => 5,
656 => 5);
//получаем совпадающее значение как массив
$c = array_flip(array_diff(array_count_values($a), array(1)));
//получаем массив повторяющихся значений
$r = array_intersect($a, $c);
//получаем массив уникальных значений
$a = array_diff($a, $c);
//вот как это выглядит
echo "<pre>";
print_r($c);
print_r($a);
print_r($r);
//вывод
foreach($a as $k=>$v) echo $k . " - " . $v . "<br>";
$k = array_rand($r);
echo $k . " - " . $r[$k];
|
Возможно у вас будет несколько повторяющихся значений, чуточку усложнится код.
[поправлено модератором]
Ну и зря. )) | |
|
|
|
|
|
|
|
для: TanTaL91
(07.02.2011 в 17:32)
| | Можно поступить следующим образом
<?php
// Общее количество выводимых значений
$total = 4;
// Количество фиксированных значений
$fixed = 3;
// Массив
$arr = array(121 => 10,
453 => 8,
432 => 5,
534 => 12,
123 => 5,
656 => 5);
// Сортируем в обратном порядке с сохранением
// связи с ключами
arsort($arr);
// Выводим фиксированные значения
$count = 0;
foreach($arr as $key => $value)
{
// Выводим фиксированное значение
echo "$key => $value<br />\r\n";
// Удаляем элемент
unset($arr[$key]);
// Увеличиваем значение счетика
$count++;
if($count == $fixed) break;
}
// Выводим случайные значения массива
if($total - $fixed > 0)
$rand_keys = array_rand($arr, $total - $fixed);
// Если значений больше одного
if(is_array($rand_keys))
for($i = 0; $i < count($rand_keys); $i++)
{
echo $rand_keys[$i]." => ".$arr[$rand_keys[$i]]."<br />\r\n";
}
// Если начение одно
else if(!empty($rand_keys))
{
echo $rand_keys." => ".$arr[$rand_keys]."<br />\r\n";
}
?>
|
[поправлено модератором: ветка от сюда выделена в новую тему Вычислить среднюю стоимость машин, пожалуйста, под новые вопросы заводите новые темы] | |
|
|
|
|
|
|
|
для: cheops
(07.02.2011 в 17:56)
| | Спасибо вам огромное, сейчас все попробую :) | |
|
|
|