Создать новый массив из многомерного массива на основе условий поиска - PullRequest
0 голосов
/ 01 февраля 2020

У меня есть многомерный массив. Я хочу найти значения (имя пользователя IE jon) и подсчитать общее "YES" для указанного c имени пользователя.

IE В соответствии с массивом ниже Andew повторяется три раза Индекс 1,3,4 и его значение равно «ДА». Таким образом, общее значение «ДА» Эндрю = 3

Джон повторяется два раза, но его значение равно «НЕТ», поэтому его значение = 0

Array
(
    [0] => Array
        (
            [0] => Jon
            [1] => NO
        )

    [1] => Array
        (
            [0] => Andew
            [1] => NO
        )

    [2] => Array
        (
            [0] => Walid
            [1] => YES
        )

    [3] => Array
        (
            [0] => Andew
            [1] => YES
        )

    [4] => Array
        (
            [0] => Andew
            [1] => YES
        )

    [5] => Array
        (
            [0] => Jon
            [1] => NO
        )

    [6] => Array
        (
            [0] => Andew
            [1] => YES
        )

)

I хотите сделать пользователя ключом и значением = подсчитать общее количество "Да".

ВЫХОД

Array
(
john => 0,
Andew => 3
Walid => 1
)

Кто-нибудь, пожалуйста, предложите возможное решение?

Спасибо

Ответы [ 3 ]

1 голос
/ 01 февраля 2020

Вы можете использовать array_reduce:

$stats = array_reduce($array, static function ($stats, $entry) {
  $stats[$entry[0]] = ($stats[$entry[0]] ?? 0) + ($entry[1] === 'YES' ? 1 : 0);
  return $stats;
});

Это создает массив $stats, устанавливает его начальное значение в 0 для каждого человека и увеличивает его на 1 всякий раз, когда YES найдено.

Демонстрация: https://3v4l.org/NmZ7G

0 голосов
/ 01 февраля 2020

(не очень отличается от @ Jeto's array_reduce.)

Простой foreach:

<?php

$data =
[
    ['Brian', 'YES'],
    ['Brian', 'YES'],
    ['Charles', 'NO'],
    ['Charles', 'YES'],
    ['Nicola', 'NO']
];

foreach($data as list($name, $yes_no))
    $yes_counts[$name] = ($yes_counts[$name] ?? 0) + (int) ($yes_no === 'YES');

var_export($yes_counts);

Вывод:

array (
    'Brian' => 2,
    'Charles' => 1,
    'Nicola' => 0,
  )
0 голосов
/ 01 февраля 2020

Если вам просто нужен счетчик «ДА», то ниже будет выведен счет.

$count_array = [];

foreach($array as $values){

    if(!isset($count_array[$values[0]])){

        $count_array[$values[0]] = 0;
     } 

    if($values[1] === 'YES'){

       $count_array[$values[0]] ++; 
    }       
}

print_r($count_array);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...