Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывод из массива (фиксированные и случайные значения)
 
 автор: TanTaL91   (07.02.2011 в 10:56)   письмо автору
 
 

Добрый день уважаемые форумчане. Помогите с решением задачки.

Есть массив
Ключ Значение
534 => 12
121 => 10
453 => 8
432 => 5
123 => 5
656 => 5

Мне нужно вывести через цикл 4 записи из этого массива, выводить по убыванию

12, 10, 8, 5
Сохраняя ключи, но 4ртый элемент который имеет неуникальное значение нужно выводить рандомно из возможных вариантов:
432 => 5
123 => 5
656 => 5
Одно из них....

Помогите пожалуйста!

  Ответить  
 
 автор: cheops   (07.02.2011 в 11:01)   письмо автору
 
   для: TanTaL91   (07.02.2011 в 10:56)
 

А соотношение всегда такое - первые три значения уникальны, а последнее повторяется. Или эти параметры могут изменяться?

  Ответить  
 
 автор: sim5   (07.02.2011 в 11:37)   письмо автору
 
   для: TanTaL91   (07.02.2011 в 10:56)
 

Так вы же выводите значения, а не ключи массива, тогда какая разница какого ключа вы возьмете значение 5? Если бы вам нужно было отобразить тот или ной ключ, из набора ключей имеющих одинаковые значения, тогда да.

Функция array_count_values() вернет вам количество значений в массиве. По этому массиву вы можете получить из исходнога массива два массива (функциями пересечения массивов) - имеющего только уникальные значения и имеющего одинаковые значения. Далее разложите так как вам надо. Если конечно ключ, в конечном счете, и нужен.

  Ответить  
 
 автор: TanTaL91   (07.02.2011 в 17:32)   письмо автору
 
   для: sim5   (07.02.2011 в 11:37)
 

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

  Ответить  
 
 автор: sim5   (07.02.2011 в 17:49)   письмо автору
 
   для: 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];

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

[поправлено модератором]

Ну и зря. ))

  Ответить  
 
 автор: cheops   (07.02.2011 в 17:56)   письмо автору
 
   для: 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";
  }
?>

[поправлено модератором: ветка от сюда выделена в новую тему Вычислить среднюю стоимость машин, пожалуйста, под новые вопросы заводите новые темы]

  Ответить  
 
 автор: TanTaL91   (07.02.2011 в 18:25)   письмо автору
 
   для: cheops   (07.02.2011 в 17:56)
 

Спасибо вам огромное, сейчас все попробую :)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования