Как посчитать / суммировать эти значения одного и того же слова в PHP?

#php #loops #conditional-statements

#php #циклы #условные операторы

Вопрос:

Я не могу посчитать эти слова, у меня есть некоторые данные, подобные этому :

 web = 1
sistem=1
web=1
sistem=1
web=1
sistem=1
sistem=0
sistem=0
web=0
sistem=0
web=0
sistem=0
web=0
web=0
  

Я хочу получить результат, подобный этому :

 web = 3
sistem = 3
  

Я использую array_count_values(), но этот результат не очень хорош

 Array ( [web=1] => 3 [sistem=1] => 3 [sistem=0] => 4 [web=0] => 4 )
  

Мой код, подобный этому :

  foreach ($g as $key => $kata) {
            if (strpos($cleanAbstrak, $kata)) {
                echo $kata . $ada . "<br>";
                $p[] = $kata . "=" . $ada;

                // print_r($p);
                echo "<br><br>";
            } else {
                echo $kata, $tidak . "<br>";
                $q[] = $kata  . "=" . $tidak;
                // $m = explode(" ", $q);
                // print_r($q);
                // echo $q . '<br>';
                echo "<br><br>";
            }
        }
        $s = array_merge($p, $q);

        echo "<br><br>";

        print_r($s);


        echo "<br>";
        $f = array_count_values($s);
        // print_r($f);

        echo "<br><br>";
  

большое вам спасибо, если вы готовы мне помочь

РЕЗУЛЬТАТ ЭТОГО КОДА

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

1. вы можете проверить, $tidak == 0 не используете ли вы его, нет?

2. Спасибо, что ответили на мой вопрос, но я не очень понимаю, где я должен это ввести?

3. с переменной, я полагаю, было просто, $tidak поэтому sistem=0 <- $tidak используйте if для контрольной переменной и не используйте ее, если равно нулю. if($tidak==0){continue;}else{ $q[] = $kata . "=" . $tidak; ...

4. Откуда данные? Можете ли вы показать var_export($g); перед foreach() циклом.

5. $ g берется из предыдущих данных

Ответ №1:

Другой простой способ — использовать подобный счетчик:

 $web=0;
$sistem=0;
foreach ($g as $key => $kata) {
            if (strpos($cleanAbstrak, $kata)) {
              
                $sistem=$sistem   $ada;

            } else {
               $web=$web $tidak
            }
        }
  
  echo 'web='.$web.'<br> sistem='.$sistem;
  

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

1. Вы это тестировали?

Ответ №2:

Во-первых, вам нужно разделить слово и значение. Во-вторых, вам нужно проверить значение: если оно равно нулю, вы отпускаете его (больше не можете его удерживать). Еще вы подсчитываете значение; если оно записано, я полагаю, оно может быть больше 1 ; если это не так, это должно быть «word» или ничего (что значительно облегчило бы подсчет).

Что-то вроде

 <?php
$tab = [
'web=1',
'sistem=1',
'web=1',
'sistem=1',
'web=1',
'sistem=1',
'sistem=0',
'sistem=0',
'web=0',
'sistem=0',
'web=0',
'sistem=0',
'web=0',
'web=0',
];

$tab_clean = [];
foreach($tab as $item) {
    preg_match('/([a-z] )=([d] )/', $item, $matches);
    //print_r($matches);
    $word = $matches[1];
    $number = $matches[2];
    for($i = 0; $i < $number; $i  ) {
        $tab_clean[] = $word;
    }
}
$tab_count = array_count_values($tab_clean);
print_r($tab_count);
?>