Как использовать (или комбинировать) несколько массивов для использования в foreach - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь отобразить некоторый текст на форуме vbulletin, если автор темы является членом группы пользователей 5, 6 или 7. В прошлом, когда я использовал массивы, у них обычно был только один массив.Мой текущий код имеет несколько массивов, которые я не знаю, как использовать.Данные, хранящиеся в полях usergroupid & membergroupids - это одно число на основе идентификатора группы.

CentOS Linux 7.6.1810, phpmyadmin 4.8.4, версия сервера 5.5.60-MariaDB, PHP 7.1.29.Я пробовал array_merge, но поскольку значения взяты из базы данных, я не знаю, как дать каждому массиву ключ и значение.Я считаю, что каждый ключ и / или значение должны быть уникальными для объединения массивов.

Мой код

<code>$current_thread = $thread['threadid'];  

    $query = $vbulletin->db->query_first("  
        SELECT user.usergroupid, user.membergroupids  
        FROM " . TABLE_PREFIX . "thread AS thread  
        LEFT JOIN " . TABLE_PREFIX . "user AS user ON (user.userid = thread.postuserid)  
        WHERE thread.threadid = " . $current_thread . "  
        "); 

    $primary_group = $query['usergroupid'];  
    $secondary_groups = $query['membergroupids'];  

    if(!empty($secondary_groups)) {  
        $groups = $primary_group . "," . $secondary_groups;  
    } else {  
        $groups = $primary_group;  
    }      

    $data = explode(PHP_EOL, $groups); 

    foreach ($data AS $data_groups)  
    {
    $usergroup = array_map('trim', explode(',', $data_groups));  
    print("<pre>".print_r($usergroup,true)."
");} vB_Template :: preRegister ('threadbit', массив ('group' =>$ groups_all));

Вывод

Array
(
    [0] => 6
)
Array
(
    [0] => 2
    [1] => 5
)
Array
(
    [0] => 6
)
Array
(
    [0] => 6
)
Array
(
    [0] => 2
    [1] => 5
)
Array
(
    [0] => 6
)
Array
(
    [0] => 6
)
Array
(
    [0] => 6
)
Array
(
    [0] => 2
    [1] => 5
)

Вывод, приведенный выше, основан на 9 темах на просматриваемом форуме. Есть ли способ проверить, есть ли начальный поток?находится в группе 5, 6 или 7, которую я могу использовать позже?

1 Ответ

0 голосов
/ 16 мая 2019

Вы можете использовать array_intersect для проверки значений массива в 5,6,7

$result = [];
foreach ($data as $data_groups) {
    $usergroup = array_map('trim', explode(',', $data_groups));
    $temp      = array_intersect($usergroup, [5, 6, 7]); // checking if $usergroup 
                                                         //valus matches
    if (count($temp) > 0) {
        $result[] = $data_groups; 
        // if don't want complete data groups then
        //$result[] = $temp; // only matched groups will add
    }
}
// you can use $result for your requirement 

array_intersect - Вычисляет пересечение массивов

...