помогите посчитать одинаковые числа в массиве

J2
На сайте с 13.12.2011
Offline
46
1177

Здравствуйте уважаемые! Есть код вывода содержимого из колонки 'geval_scores' таблицы базы MySQL. Содержание этой колонки "1" и "-1". Подскажите как посчитать элементы "1" и "-1" и занести их в свою переменную.

			if (!empty($rating_info)){


foreach ($rating_info as $k=>$v){
if ($v['geval_scores'] == '-1'){
$v['geval_scores1'] = '-1';
}
$rating_info[$k] = $v;
}
foreach ($rating_info as $k=>$v){
if ($v['geval_scores'] == '1'){
$v['geval_scores2'] = '1';
}
$rating_info[$k] = $v;
}
}
Tpl::output('rating_info',$rating_info);

У меня они просто выводятся на экран таким кодом в отдельном файле.


<?php if(!empty($output['rating_info']) && is_array($output['rating_info'])){?>
<?php foreach($output['rating_info'] as $k=>$v){?>
<?php echo $v['geval_scores2'];?>
<?php }?>
<?php }?>


---------- Добавлено 05.04.2014 в 17:22 ----------

где звездочки и цифры там квадратные скобки
https://mallinru.ru/ (https://mallinru.ru/)
TF-Studio
На сайте с 17.08.2010
Offline
334
#1

Можно и 1 запросом (SQL) все получить, а не гонять перебор массива, к тому же 2 раза...

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
J2
На сайте с 13.12.2011
Offline
46
#2

Дело в том что не понятно как идет подключение к базе движек китайский. Просто на данный момент все данные из таблицы находятся в переменной $rating_info. Вот я и изобретаю лисапед. Нужно взять из переменной данные колонки geval_scores равные 1 и -1 и занести количество 1 - в свою переменную, а -1 в свою, для дальнейшей работы с ними. Я просто новичек в php. Помогите пожалуйста не получается уже день мучаюсь.

siv1987
На сайте с 02.04.2009
Offline
427
#3


$positive = 0;
$negative = 0;

foreach($rating_info as $k => $v){
if($v['geval_scores'] == 1){
$positive++;
}
else{
$negative++;
}
}
J2
На сайте с 13.12.2011
Offline
46
#4

что то не работает. не выводится на экран эта переменная

siv1987
На сайте с 02.04.2009
Offline
427
#5

Какая эта? Для шаблона возможно нужно задать другую

J2
На сайте с 13.12.2011
Offline
46
#6

Делаю такой код

if (!empty($rating_info)){

foreach ($rating_info as $k => $v){

$v['geval_scores1']=0;

$v['geval_scores2'] =0;

if($v['geval_scores'] == 1){

$v['geval_scores2']++;

}

else{

$v['geval_scores1']++;

}

$rating_info[$k] = $v;

}

}

и при выводе таким кодом

<?php if(!empty($output['rating_info']) && is_array($output['rating_info'])){?>

<?php foreach($output['rating_info'] as $k => $v){?>

<?php echo $v['geval_scores2'];?>

<?php }?>

<?php }?>

Выводится на экран "1 0 1". а должно 2.

Если сделать переменные $v['geval_scores2'] другого вида то они вообще не работают. Если убрать $rating_info[$k] = $v; тоже ничего не работает.

L
На сайте с 07.12.2007
Offline
351
#7
Jigan2:
Здравствуйте уважаемые! Есть код вывода содержимого из колонки 'geval_scores' таблицы базы MySQL. Содержание этой колонки "1" и "-1". Подскажите как посчитать элементы "1" и "-1" и занести их в свою переменную.

$arr = array-count-values(ВашМассив) вернёт ассоциативный массив "значение" => "количество его повторений".

И не надо гонять никаких циклов.

В вашем случае будет:

$arr['-1']' => число значений -1

$arr['1'] => число значений 1

PS: Обращаться к элементам массива надо с '' $arr['-1']

siv1987
На сайте с 02.04.2009
Offline
427
#8

Что вы вообще делаете, таким образом у вас всегда будет либо 0 либо 1, потому что вы считаете текущие значение. Нужно считать глобально. В шаблоне вроде как есть поддержка php, считайте там. Или добавьте новую переменную


Tpl::output('info', array('pos' => $positive, 'neg' => $negative));
J2
На сайте с 13.12.2011
Offline
46
#9

Я пытаюсь изучить php. Это подсчет голосов клиентов и вывод их в виде звезд и процентов. В общем так получилось

			

if (!empty($rating_info)){
$positive = 0;
$negative = 0;
foreach($rating_info as $v){
if($v['geval_scores'] == 1){
$positive++;
}
else{
$negative++;
}
if($negative > $positive){
if($positive > 0) {
$rating_total = ($positive / $negative) * 100;
}
else{
$rating_total = '';
}
}
else{
if($negative > 0){
$rating_total = ($negative / $positive) * 100;
}
else{
if($positive > 0) {
$rating_total = ($negative / $positive) * 100;
}
else{
$rating_total = '';
}
}
}
$v['geval_scores2'] = $rating_total;
$rating_info[$k] = $v;
}
}
Tpl::output('rating_info',$rating_info);

а в шаблоне вывел

 <?php if(!empty($output['rating_info']) && is_array($output['rating_info'])){?>

<?php foreach($output['rating_info'] as $k => $v){?>
<?php if(!empty($v['geval_scores2'])) {$rate_rating = $v['geval_scores2'];}?>
<?php }?>
<?php echo '<span class="rate-star"><em><i style=" width:';?><?php echo $rate_rating;?><?php echo '%;"></i></em></span>';?>
<?php echo $rate_rating;?><?php echo '%';?>
<?php }?>

Большое Вам спасибо за помощь без Вас бы не справился.

---------- Добавлено 05.04.2014 в 22:39 ----------

только я по моему проценты не так считаю

---------- Добавлено 05.04.2014 в 23:11 ----------

Да проценты не правильно считал. Вот так правильно мож кому пригодится.

if (!empty($rating_info)){

$positive = 0;
$negative = 0;

foreach($rating_info as $v){
if($v['geval_scores'] == 1){
$positive++;
}
else{
$negative++;
}
$otzivi = $positive + $negative;
if($positive > 0){
$rating_total = 100/$otzivi*$positive;
}
else{
$rating_total = 0;
}
$v['geval_scores2'] = $rating_total;
$rating_info[$k] = $v;
}
}
Tpl::output('goods_info',$goods_info);
Tpl::output('rating_info',$rating_info);

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий