#php #foreach #count
#php #foreach #подсчет
Вопрос:
У меня есть следующий цикл foreach, который возвращает уникальные имена пользователей.
$my_array = array();
foreach ( $log->results as $entry ) {
$unData = unserialize( $entry ->data );
$ref_id = $entry ->ref_id;
$ref_nick = get_user_meta( $ref_id, 'nickname', true );
if ( in_array($ref_nick, $my_array) ) {
continue;
}
$my_array[] = $ref_nick;
echo $ref_nick;
}
Я хотел бы посчитать имена пользователей, чтобы в конечном итоге я мог создавать HTML-шаблон, например:
Имя пользователя | ПОДСЧЕТ |
---|---|
Алиса | 22 |
Боб | 10 |
Чарли | 7 |
Сначала я попытался создать другой цикл foreach, который использует $my_array
, а не echo, но это кажется неэффективным.
Я пробовал что-то вроде:
if ( in_array($ref_nick, $my_array) ) {
count ;
continue;
}
но, используя это, я не уверен, как я могу добавить значения в массив, который хотел бы, как
array(
Alice => 22,
Bob => 10,
Charlie => 7
)
Я думаю, мне нужно построить массив таким образом, чтобы я мог снова выполнить цикл, но в порядке наибольшего количества сначала в шаблоне HTML.
Ответ №1:
Один из вариантов — создать $my_array
вот так:
$my_array = array();
foreach ( $log->results as $entry ) {
$unData = unserialize( $entry ->data );
$ref_id = $entry ->ref_id;
$ref_nick = get_user_meta( $ref_id, 'nickname', true );
if ( array_key_exists($ref_nick, $my_array) ) {
//nick already exists in array, so add 1 to existing value
$my_array[$ref_nick] = $my_array[$ref_nick] 1;
}
else {
//add new nick to array and set value 1
$my_array[$ref_nick] = 1;
}
}
//Sort descending:
arsort($my_array);
//Finally loop again and build your HTML:
foreach($my_array as $nick => $count) {
echo '<tr><td>'.$nick.'</td></td>'.$count.'</td></tr>';
}
Комментарии:
1. когда я дамп my_array, я получаю { [«Alice»]=> int(1) [«Bob»]=> int(1)}, поэтому записываю только 1, а не правильное число pastebin.pl/view/c09d2acf
2. это последнее
array_key_exists
редактирование сделало это. Спасибо.3. Обновлен ответ. Вместо rsort() (сортировка по ключам) должна быть arsort() (сортировка по значениям)