За последние 24 часа нас посетили 57530 программистов и 1683 робота. Сейчас ищут 1324 программиста ...

Сравнение массивов и вывод данных

Тема в разделе "Прочие вопросы по PHP", создана пользователем Intrerio, 22 авг 2015.

  1. Intrerio

    Intrerio Активный пользователь

    С нами с:
    20 мар 2015
    Сообщения:
    176
    Симпатии:
    7
    Здравствуйте. Вот собственно вопрос:
    Есть две таблицы в БД. Одна с пользователями в которой есть колонка Группа. Там стоит айди группы пользователя. В Таблице с группами есть колонка Экшн в которой через запятую без пробелов прописано что может делать группа на сайте (добавлять новости, видеть те или инные страницы и т.д.). Есть таблица Описание действий в которой есть Экшн и на русском пояснение Экшина. Я вытягиваю запросом из БД список действий для всех груп и хочу чтоб на страничке вместо действий было описание действий на русском. Уперся в проблему как сопоставить два массива и вывести только те данные которые подходят к группе пользователя.
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Выкладывай структуру с данными и примерами своих запросов на http://sqlfiddle.com/
    так тебе будет легче всего помочь.
     
  3. Intrerio

    Intrerio Активный пользователь

    С нами с:
    20 мар 2015
    Сообщения:
    176
    Симпатии:
    7
    Код (PHP):
    1. $selgrups=mysql_query("SELECT * FROM `user_group` ");  //Тянем все что есть в таблице с группами (id,name,actions(тут news_special,add_agents,add_users)
    2. $sel_name_actions=mysql_query("SELECT action FROM `name_actions`"); //тут описание actions (id, name(Например:Добавить пользователя), action(Например: add_users)
    3.  
    4. while ($row = mysql_fetch_array($selgrups)) {
    5. $action=explode(",",$row['actions']); // разбиваю на строчки
    6. }
    Вот исходя из кода мне нужно сравнить actions из первого запроса с action из второго запроса и если есть одинаковые значения то только к ним вывести name из второго запроса.

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color][size=85][color=green]Добавлено спустя 6 минут 20 секунд:[/color][/size]Все можно было бы сделать проще по типу [code=php]if ($action[0]==add_user)
    ... Но тут есть нюанс. Мне нужно универсальное решение чтоб можно было добавлять другие группы пользователей, менять им права доступа и чтоб все это было автоматизировано и без вмешания в код системы
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Усложняешь задачу не предоставляя данные, но ничего, попробуй использовать JOIN.
     
  5. Intrerio

    Intrerio Активный пользователь

    С нами с:
    20 мар 2015
    Сообщения:
    176
    Симпатии:
    7
    Какие именно данные нужны?после // есть пример строчек из БД.
    JOIN не поможет так как в таблице user_group есть колонка actions а в ней все данные записаны вот так:
    news_special,add_news,add_admins,add_co,add_regions,add_assist,add_agents,add_users,add_clients,peredacha_regionam,peredacha_agentam,list_all_users,list_usersgrupa_1,list_usersgrupa_2,list_usersgrupa_3,list_usersgrupa_4,list_usersgrupa_5,list_usersgrupa_6,change_group_rules,add_group_rules
    Тут то и стоит задача:
    1) Разобрать даную строчку по частям (разделитель запятая)
    2) Вытянуть из name_actions названия действий
    3) Сопоставить 1) с 2)
    4) Вывести на страницу на русском язике обозначение действий если они совпали как в примере выше.

    Добавлено спустя 4 минуты 20 секунд:
    Тут нужно решение с массивами вот только какое пока не могу понять
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    схема и данные в sql или на sqlfiddle
     
  7. Intrerio

    Intrerio Активный пользователь

    С нами с:
    20 мар 2015
    Сообщения:
    176
    Симпатии:
    7
    давайте отойдем сейчас от моей БД и представим себе что у нас есть некая запись в БД типа "news_special,add_news,add_admins,add_co,add_regions,add_assist,add_agents" и есть запись в другой таблице "add_admins". Нам нужно вывести на страничку только те значения которые есть и в одной и в другой таблице. Как сделать так?
     
  8. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Я бы строку с запятыми разбил на отдельные записи, если оставить всё как есть, то видимо тут поможет поиск по тексту LIKE.
     
  9. Intrerio

    Intrerio Активный пользователь

    С нами с:
    20 мар 2015
    Сообщения:
    176
    Симпатии:
    7
    Вот, правильно, на отдельные записи. Только я решил разбить на отдельные записи уже результат запроса. Тоесть я постучал в базу, попросил отдать мне ячейку с "news_special,add_news,add_admins,add_co,add_regions,add_assist,add_agents", потом с помощю explode я разбил запись на отдельные данные которые сейчас в массиве. Теперь постает вопрос, как вытянуть данные из БД с другой таблицы, засунуть их в массив и потом сопоставить два массива на наличие одинаковых данных?

    Добавлено спустя 6 минут 37 секунд:
    Вот уже есть два массива:
    array(20) { [0]=> string(12) "news_special" [1]=> string(8) "add_news" [2]=> string(10) "add_admins" [3]=> string(6) "add_co" [4]=> string(11) "add_regions" [5]=> string(10) "add_assist" [6]=> string(10) "add_agents" [7]=> string(9) "add_users" [8]=> string(11) "add_clients" [9]=> string(18) "peredacha_regionam" [10]=> string(17) "peredacha_agentam" [11]=> string(14) "list_all_users" [12]=> string(17) "list_usersgrupa_1" [13]=> string(17) "list_usersgrupa_2" [14]=> string(17) "list_usersgrupa_3" [15]=> string(17) "list_usersgrupa_4" [16]=> string(17) "list_usersgrupa_5" [17]=> string(17) "list_usersgrupa_6" [18]=> string(18) "change_group_rules" [19]=> string(15) "add_group_rules" }

    Array ( [0] => news_special [1] => add_news [2] => add_admins [3] => add_co [4] => add_regions [5] => add_assist [6] => add_agents [7] => add_users [8] => add_clients [9] => peredacha_regionam [10] => peredacha_agentam [11] => list_all_users [12] => list_usersgrupa_1 [13] => list_usersgrupa_2 [14] => list_usersgrupa_3 [15] => list_usersgrupa_4 [16] => list_usersgrupa_5 [17] => list_usersgrupa_6 [18] => add_group_rules [19] => change_group_rules )

    Как вытянуть общие записи???
     
  10. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    кто это месиво будет читать?


    Вытянуть данные из массивов? Можно перебрать через foreach и сравнивать.

    https://secure.php.net/manual/ru/ref.array.php
    array_diff
     
  11. Intrerio

    Intrerio Активный пользователь

    С нами с:
    20 мар 2015
    Сообщения:
    176
    Симпатии:
    7
    Ну месиво лишь для наглядности.
    Словом прошол я на шажочек вперед.
    С помощю
    Код (PHP):
    1. $result = array_intersect($action, $arr);
    2.  
    Я нашел совпадения из двух массивов. Теперь мне эти совпадения нужно перевести в переменные и потом сделать запрос в БД в котором WHERE id='переменной которую я сейчас хочу добыть
    Что посоветует добрый люд?'
     
  12. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Тут один из вариантов недопонимание или что-то делаешь не оптимальным образом.

    совпадения это текст, пример покажи
    хочешь сделать запрос в БД, как в БД хранятся данные эти данные

    в исходном коде можно с отступами скопировать, или обернуть в тег pre для HTML.
     
  13. Intrerio

    Intrerio Активный пользователь

    С нами с:
    20 мар 2015
    Сообщения:
    176
    Симпатии:
    7
    Пробую еще раз с самого начала.
    Таблица №1:(user_group)
    id name actions
    1 Admins news_special,add_news,add_admins,add_co
    2 Users news_special,add_news
    3 Other news_special

    Таблица №2 (name_actions)
    id name action
    1 Добавление админа add_admin
    2 Новости news_special
    3 Добавление новости add_news

    1.Создаю страницу на которой можно видеть права той или иной группы.
    2.Вывожу на страницу с Таблица №1 колонку actions
    3.Выглядит не красиво. Нужно чтоб было на русском
    4. Разбиваю с помощю explode колонку actions на отдельные строки:
    Код (PHP):
    1. $selgrups=mysql_query("SELECT * FROM `user_group` WHERE id='1'");
    2. while ($row = mysql_fetch_array($selgrups)) {
    3. $action=explode(",",$row['actions']);
    4. }
    5. Вывожу в виде массива данные из второй таблицы
    Код (PHP):
    1. $sel_name_actions=mysql_query("SELECT action FROM `name_actions`");
    2. $arr = array();
    3. while($rows = mysql_fetch_row($sel_name_actions)){
    4.     $arr[] = $rows[0];
    5. }
    5. Сравниваю значения:
    Код (PHP):
    1. $result = array_intersect($action, $arr);
    6.Теперь нужно присвоить значениям массива $result какуето переменную чтоб можно было сделать поиск в Таблице №2 по типу :
    Код (PHP):
    1. SELECT name FROM `name_actions` WHERE action='$result'
    7. Курю бамбук.
    Так понятней?

    Добавлено спустя 10 минут:
    Словом разобрался сам. Спасибо за подсказку с foreach. Все заработало как надо
     
  14. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв