Получение сокращенного результата из двумерного массива

#php #arrays

#php #массивы

Вопрос:

У меня есть двумерный массив объектов. Я хочу получить 5 лучших значений с наибольшим $prob[$i]->value значением из массива.

 $prob[$i] = new stdClass();
while ($row1 = @mysqli_fetch_array($selectTag))
{
    $prob[$i]->value = ($pos_Count   1)/ ($totalPOS_count   $distinct_pos_Count);
    $prob[$i]->tag = $row1['tag'];
}

arsort($prob);
var_dump($prob);
  

Этот код выдает только 1 результат.

Как я могу получить 5 лучших значений в desc of из $prob[$i]->value ?

Комментарии:

1. сделайте это в цикле $i

Ответ №1:

Попробуйте следующее:

 while ($row1 = @mysqli_fetch_array($selectTag)) {
    $prob[] = (object) array(
        "value" => ($pos_Count   1)/ ($totalPOS_count   $distinct_pos_Count),
        "tag"   => $row1['tag'],
    );
}

uasort($prob, function($a, $b) { return strcmp($a->value, $b->value) } );

var_dump(array_slice($prob, 0, 5));
  

Я добавил несколько вещей в ваш код:

  • правильно нажмите на свой массив. Для этого вам вообще не нужно $i , если вам удастся добавить все элементы в одной команде. Я сделал это, используя простой трюк с созданием временного массива и преобразованием его в object на лету.
  • определите свою функцию сортировки с помощью uasort .
  • берите только первые 5 элементов из отсортированного массива с помощью array_slice .

Комментарии:

1. Добавить return в compare функцию