За последние 24 часа нас посетили 30459 программистов и 1806 роботов. Сейчас ищут 811 программистов ...

Сравнить и вывести массив

Тема в разделе "PHP для новичков", создана пользователем amf1k, 25 авг 2014.

  1. amf1k

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

    С нами с:
    20 авг 2014
    Сообщения:
    86
    Симпатии:
    0
    есть 4 массива: $films - Фильмы, $actors - Актеры, filmsActors - Фильмы в которых играет роль тот или иной актер и массив $users - это актеры, где мы запрашуем найти фильм(фильмы) с участием этих актеров!
    как через цикл foreach сравнить актеров($users) и массив ($filmsActors) вывести соответсвенную информацию? тоесть
    Код (PHP):
    1. //Фильмы:            
    2. $films = array(
    3.             1=>array('id'=>1, 'title'=>'Том и Джери', 'year'=>2004),
    4.             2=>array('id'=>2, 'title'=>'Кот в сапогах', 'year'=>2013),
    5.             3=>array('id'=>3, 'title'=>'Доктор Айболит', 'year'=>2012),
    6.             4=>array('id'=>4, 'title'=>'Мачо и Ботан', 'year'=>2013),
    7.             5=>array('id'=>5, 'title'=>'Универ', 'year'=>2008),
    8.         );
    9. //Aктеры:
    10. $actors = array(
    11.             1=>array('id'=>1, 'name'=>'Петя'),
    12.             2=>array('id'=>2, 'name'=>'Лена'),
    13.             3=>array('id'=>3, 'name'=>'Света'),
    14.             4=>array('id'=>4, 'name'=>'Коля'),
    15.             5=>array('id'=>5, 'name'=>'Вася'),
    16.             6=>array('id'=>6, 'name'=>'Маша')
    17.         );
    18. //Фильмы в которых актеры играют свою роль:
    19. $filmsActors = array(
    20.                     1=>array('id'=>1, 'film'=>'Том и Джери', 'actor'=>'Вася'),
    21.                     2=>array('id'=>2, 'film'=>'Том и Джери', 'actor'=>'Маша'),
    22.                     3=>array('id'=>3, 'film'=>'Универ', 'actor'=>'Петя'),
    23.                     4=>array('id'=>4, 'film'=>'Универ', 'actor'=>'Вася'),
    24.                     5=>array('id'=>5, 'film'=>'Универ', 'actor'=>'Маша'),
    25.                     6=>array('id'=>6, 'film'=>'Мачо и ботан', 'actor'=>'Коля'),
    26.                     7=>array('id'=>7, 'film'=>'Мачо и ботан', 'actor'=>'Вася'),
    27.                     8=>array('id'=>8, 'film'=>'Доктор Айболит', 'actor'=>'Света'),
    28.                     9=>array('id'=>9, 'film'=>'Доктор Айболит', 'actor'=>'Петя'),
    29.                     10=>array('id'=>10, 'film'=>'Доктор Айболит', 'actor'=>'Лена'),
    30.                     11=>array('id'=>11, 'film'=>'Доктор Айболит', 'actor'=>'Коля'),
    31.                     12=>array('id'=>12, 'film'=>'Кот в сапогах', 'actor'=>'Вася'),
    32.                     13=>array('id'=>13, 'film'=>'Кот в сапогах', 'actor'=>'Петя'),
    33.     );
    34. //Запрашуемые актеры:
    35. $users = array(
    36.    1=>array('id'=>1, 'name'=>'Вася'),
    37.    2=>array('id'=>2, 'name'=>'Петя'), 
    38. );
    Вывод информации (Так как Вася и Петя играли вместе свои роли только в двох фильмах то результат):
    id='2' title='Кот в сапогах' year='2013'
    id='5' title='Универ' year='2008'
    Помогите решить эту задачу пожалуйста!
     
  2. VaneS

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

    С нами с:
    16 ноя 2011
    Сообщения:
    636
    Симпатии:
    4
    Адрес:
    Россия
    Эммм, а почему массивы? Не проще ли использовать БД?
     
  3. amf1k

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

    С нами с:
    20 авг 2014
    Сообщения:
    86
    Симпатии:
    0
    БД не использую сейчас! (Это только тест)
     
  4. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Ну как. Берете $users разбираете его через foreach.
    Далее внутри пишем еще один foreach и уже разбираем $filmsActors.
    Сравниваем ключи и значения и вуаля, получаем, что хотим.
     
  5. amf1k

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

    С нами с:
    20 авг 2014
    Сообщения:
    86
    Симпатии:
    0
    Код (Text):
    1.  
    2.     foreach($users as $value1) {
    3.         foreach($filmsActors as $value2) {
    4.             if($value1['name'] == $value2['actor'])
    5.              echo $value2['film'].'<br/>';
    6.         }
    7.        
    8.     }
    что то не выходит!
     
  6. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Все верно, почему не выходит, тебе выводит:

    Том и Джери ---- Вася
    Универ ---- Вася
    Мачо и ботан ---- Вася
    Кот в сапогах ---- Вася
    Универ ---- Петя
    Доктор Айболит ---- Петя
    Кот в сапогах ---- Петя


    Тебе нашло все фильмы с Васей и Петей, что не так?
     
  7. amf1k

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

    С нами с:
    20 авг 2014
    Сообщения:
    86
    Симпатии:
    0
    нет, Вы немножко не поняли вопрос, мне нужно найти фильм или фильмы, в которых играли роль вместе вася и петя, тоесть:
    ID - 5, Title - Универ, Year - 2008
    ID - 2, Title - Кот в сапогах, Year - 2013

    и кстати, какими тегами вставлять PHP код на вашем форуме??? а то, как то не красиво выходит(
     
  8. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Думай, думай, думай, главное, то, что ты на правильном пути ;)
    [ code = php ][ /code ] - без пробелов.
     
  9. amf1k

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

    С нами с:
    20 авг 2014
    Сообщения:
    86
    Симпатии:
    0
    решение у меня есть, но мне бы хотелось как бы упростить код, может что-то подскажите?
    Код (PHP):
    1. //Находим все фильмы с данными актерами
    2. $result = array();
    3. for ($i = 1; $i < count($filmsActors)+1; $i++)
    4.      for ($j = 1; $j < count($users)+1; $j++)
    5.           if ($users[$j]["name"] == $filmsActors[$i]["actor"])
    6.                if (isset($result[$filmsActors[$i]["film"]]))
    7.                     $result[$filmsActors[$i]["film"]]++;
    8.                else
    9.                     $result[$filmsActors[$i]["film"]] = 1;
    10.  
    11. //Выбираем только те, в которых есть все перечисленные актеры
    12. foreach ($result as $k => $v)
    13.      if ($v == count($users))
    14.           foreach ($films as $v1)
    15.                if ($v1["title"] == $k)
    16.                     echo "ID - ".$v1["id"].", Title - ".$v1["title"].", Year - ".$v1["year"]."</br>\r\n";
    17.