Подсчитать конкретное число в цикле Foreach - PullRequest
0 голосов
/ 31 марта 2019

Сколько раз определенное число появляется внутри цикла foreach.

Для этого у меня есть функция array_count_values, но она возвращает общее значение с указанным выше значением в цикле foreach.

<table>
  <tr>
    <th>User ID</th>
    <th>Number</th>
  </tr>
  <?php foreach($users as $user_id){ ?>
  <tr>
     <td><?php echo $id = $user_id->ID; ?></td>

  <?php $user_results = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM " . $wpdb->prefix . "mlw_results WHERE deleted='0' AND  (user=%d OR email='%s')", $id, $email) ); ?>

   <?php foreach( $user_results as $result ) { ?>
      <td><?php echo  $result->correct_score.', ';?></td>
   <?php } ?>

  </tr>  
<?php } ?>
</table>

Токовый выход:-

   UserID                 Number

        1                 33, 55, 88, 100, 66, 4

        2                 33, 77, 88, 100, 100, 4

        3                 22, 51, 80, 100, 100, 4

        4                 1, 48, 56, 15, 78, 65, 45  

Ожидаемый результат: -

   UserID                 Number

       1                  100 comes 1 time.

       2                  100 comes 2 time.

       3                  100 comes 2 time.

       4                  100 comes 0 time.

Ответы [ 4 ]

0 голосов
/ 31 марта 2019

Я решил это так https://3v4l.org/v70jC

$numbers = [
    [33, 55, 88, 100, 66 ,4],
    [33, 77, 88, 100, 100, 4],
    [22, 51, 80, 100, 100, 4],
    [1, 48, 56, 15, 78, 65, 45 ]
];

foreach ($numbers as $row) {
    if (in_array(100, $row)) {
        $amountOfHundreds = array_count_values($row)[100];
        echo $amountOfHundreds . PHP_EOL;
    }
}
0 голосов
/ 31 марта 2019

Введите счетчик и поместите if для случаев, равных 100, Пример:

<table>
  <tr>
    <th>User ID</th>
    <th>Number</th>
  </tr>
  <?php foreach($users as $user_id){ ?>
    <tr>
       <td><?php echo $id = $user_id->ID; ?></td>

      <?php

        $user_results = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM " . $wpdb->prefix . "mlw_results WHERE deleted='0' AND  (user=%d OR email='%s')", $id, $email) );

        $count=0;

        foreach( $user_results as $result ) { 
          if($result->correct_score===100){
            $count++;
          }
        }
      ?>
      
      <td><?php echo '100 comes '.$count.' time.';?></td>
    </tr>  
  <?php } ?>
</table>
0 голосов
/ 31 марта 2019

Код:

<?php

$data = [
    1 => [33, 55, 88, 100, 66, 4],
    2 => [33, 77, 88, 100, 100, 4],
    3 => [22, 51, 80, 100, 100, 4],
    4 => [1, 48, 56, 15, 78, 65, 45]
];


function printOccurence(array $data, $neddle)
{
    foreach ($data as $key => $dat) {

        if (in_array($neddle, $dat)) {
            echo "$key comes $neddle " . array_count_values($dat)[$neddle] . " times." . PHP_EOL;

        } else {
            echo "$key comes $neddle " . "0" . " times." . PHP_EOL;
        }
    }
}

printOccurence($data, 100);

Использование:

printOccurence($data, 100);

Результат:

1 comes 100 1 times.
2 comes 100 2 times.
3 comes 100 2 times.
4 comes 100 0 times.
0 голосов
/ 31 марта 2019

Если я понимаю ваш массив и foreach, то вы сможете использовать array_count_values, поскольку он возвращает ассоциативный массив.

Замените ваш второй foreach на:

$counts = array_count_values($user_results->correct_score);
echo "100 comes ";
if(isset($counts[100])){
    echo $counts[100];
}else{
    echo "0";
}
echo " times";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...