search — ранжирование многомерного массива php

Я пытаюсь оценить группу баллов. Итак, я взял входные данные из формы пользователей и отсортировал их от наибольшего к наименьшему в многомерном массиве, чтобы затем я мог искать в массиве пользователя и извлекать индекс, чтобы получить его «ранг», как бы я это ни делал. что-то совершенно не так! любая помощь в том, где я иду не так, будет очень признательна, или если есть лучший способ полностью!

Спасибо

PHP-код:

if ( isset( $_POST['submit'] ) ) {

$size = $num_rows;
$p = 0;
$myarray = array();

while ( $p < $size ) {
$myarray[] = array( "user" => $user[$p], "data" => $scanrate[$p] );
$p++;
}

$sort = array();

foreach ( $myarray as $k => $v ) {
$sort['data'][$k] = $v['data'];
}

array_multisort( $sort['data'], SORT_DESC, $myarray );

for ( $i = 0; $i < $num_rows; $i++ ) {
$key = array_search( $i, array_column( $myarray, 'user' ) );

if ( !$key ) {
$key = $num_rows;
}
//this is stored into my database
echo "<br>User " . $user[$i] . " scan rate " . $scanrate[$i] . " rank " . $key;
}
}

0

Решение

Вы делаете бесполезный код для такой сортировки, используйте функцию usort (), например:

while($p < $size)
{
$myarray[] = array("user" => $user[$p], "data" => $scanrate[$p]);
$p++;
}

usort($myarray, function($a, $b) {
return $a['data'] - $b['data'];
});

Теперь ваш $ myarray отсортирован, и вы можете искать и делать то, что вы хотите.

0

Другие решения

Если вы прикладываете слишком много усилий на smt. с языком сценариев, вы определенно делаете это неправильно …

$sort = array_combine($user, $scanrate);
asort($sort);

// $sort is sorted now, used it as you like:

// List them
foreach ($sort as $user => $scanrate) {
echo "<br>User " . $user . " scan rate " . $scanrate . " rank " . ++$i;
}

// Find the rank of specific user:
echo array_search('matt', array_keys($sort)) + 1;
0

По вопросам рекламы [email protected]