как получить доступ к строке в ассоциативном массиве?

Эта таблица состоит из 3 столбцов: ключевое имя продукта, общая стоимость и рейтинг. Эти ранги сортируются по общей стоимости. Как повторить только название продукта в первой строке с наибольшей общей стоимостью? Как получить доступ к ключу первой строки, состоящей из наибольшего значения?

Вот код табель о рангах

<table class="table table-bordered table-striped table-hover">
    <tr>
        <th></th>
        <th>Total</th>
        <th>Rank</th>
    </tr>
    <?php     

    $rank = get_rank($pref);

    foreach($rank as $key => $value){
        echo"<tr>";
        echo"<th>$key - $PRODUK[$key]</th>";
        echo "<td class='text-primary'>".round($pref[$key], 3)."</td>";
        echo "<td class='text-primary'>".$rank[$key]."</td>";
        echo "</tr>";
        $no++;    
    }                            
    ?>
    </table>        

$key — это ключ, а $PRODUK[key] — название продукта. И их общая стоимость $pref.

А вот код функции получения ранга

function get_rank($array){
    $pref= $array;
    arsort($pref);
    $no=1;
    $new = array();
    foreach($pref as $key => $value){
        $new[$key] = $no++;
    }
    return $new;
}

person rafdwna    schedule 28.05.2016    source источник
comment
В чем смысл функции get_rank? Может быть, чтобы получить упорядоченную копию массива вместо того, чтобы переупорядочивать массив? Разве использование arsort(), а затем нумерация ключей не то же самое, что просто использование sort()?   -  person Sgt AJ    schedule 28.05.2016
comment
Пожалуйста, покажите, как инициализируются/генерируются $PRODUK и $pref.   -  person Quasimodo's clone    schedule 28.05.2016
comment
Если этот массив представляет собой таблицу, мне любопытно, почему вы просто не используете запрос для получения и сортировки данных так, как вы хотите.   -  person Sgt AJ    schedule 28.05.2016
comment
Ваш вопрос не является хорошим вопросом, у него есть хорошие шансы быть отвергнутым и, возможно, удаленным. Пожалуйста, прочитайте Как мне задать хороший вопрос? и Как создать минимальный, полный и проверяемый пример. Покажите, что на самом деле выводится. Объясните ожидаемый результат. Показать содержимое всех массивов, включая ключи. Попробуйте var_dump($variable)   -  person Quasimodo's clone    schedule 28.05.2016


Ответы (2)


Это может помочь вам

    $rank = get_rank($pref);
    echo"<tr>";
    echo"<th>".key($rank)."</th>";
    echo "<td class='text-primary'>".round($pref[key($rank)], 3)."</td>";
    echo "<td class='text-primary'>".reset($rank)."</td>";
    echo "</tr>";
person Akshath    schedule 28.05.2016

В вашем фрагменте кода не объявлено $PRODUK. Вы повторяете $rank на foreach($rank as $key => $value). Итак, ключ $key, а копия $rank[$key] находится в $value. Попробуйте вместо этого вывести $value или уточните свой вопрос и предоставьте больше кода, где можно увидеть, что такое $PRODUK и его отношение к $rank.

Что касается вашего второго фрагмента, значения возвращаемого массива являются рангом, т.е. могут представлять ключи исходного массива. Таким образом, вы можете попытаться вывести, например. round($pref[$value]) и $PRODUK[$value]. Возможно, вам придется начать с ранга 0, поскольку массивы обычно основаны на нуле. Однако вы не предоставляете код инициализации.

Еще раз: ваш вопрос не дает достаточно информации.

Для того, чтобы ваш добавленный вопрос

Как повторить только название продукта в первой строке

$key = 1; // respective to your code $no=1;
$value = $rank[$key];

Вам не нужен цикл foreach для доступа только к одному элементу.

person Quasimodo's clone    schedule 28.05.2016
comment
Я отредактировал свой вопрос выше, надеюсь, это понятнее, чем раньше, спасибо - person rafdwna; 28.05.2016