За последние 24 часа нас посетили 59226 программистов и 1831 робот. Сейчас ищут 878 программистов ...

array_map и 2 массива?

Тема в разделе "PHP для новичков", создана пользователем social_project, 17 июл 2017.

  1. social_project

    social_project Новичок

    С нами с:
    15 апр 2016
    Сообщения:
    11
    Симпатии:
    0
    Подскажите пожалуйста есть вот 2 массива.
    PHP:
    1. $a =
    2.   0 => '',
    3.   1 => '629',
    4.   2 => '2465',
    5.   3 => '2693',
    6.   4 => '2694',
    7.   5 => '2695',
    8.   6 => '2700',
    9.   7 => '2701',
    10.   8 => '2702',
    11.   9 => '2991',
    12.   10 => '2992',
    13.   11 => '2993',
    14.   12 => '2994',
    15.   13 => '2995',
    16.   14 => '2996',
    17.   15 => '2997',
    18.   16 => '2998',
    19.   17 => '2999',
    20.   18 => '3000',
    21.   19 => '3001',
    22.   20 => '3002',
    23.   21 => '3003',
    24.   22 => '4246',
    25.   23 => '4247',
    26.   24 => '4248',
    27.   25 => '5203',
    28.   26 => '4249',
    29.   27 => '4250',
    30.   28 => '4251',
    31.   29 => '2954',
    32.   30 => '2698',
    33.   31 => '2699',
    34.   32 => '3014',
    35.   33 => '2696',
    36.   34 => '5205',
    37.   35 => '5204',
    38.   36 => '4482',
    39.   37 => '2990',
    40.   38 => '2697',
    41.   39 => '2770',
    42.   40 => '2524',
    43.   41 => '2472',
    44.   42 => '2529',
    45.   43 => '2691',
    46.   44 => '2467',
    47.   45 => '2705',
    48.   46 => '2522',
    49.   47 => '2525',
    50.   48 => '2485',
    51.   49 => '2449',
    52.   50 => '2471',
    53.   51 => '2706',
    54.   52 => '2486',
    55.   53 => '2526',
    56.   54 => '3135',
    57.   55 => '2690',
    58.   56 => '2523',
    59.   57 => '2703',
    60.   58 => '2689',
    61.   59 => '2704',
    62.   60 => '3015',
    63.   61 => '2531',
    64.   62 => '4724',
    65.   63 => '2466',
    66.   64 => '2464',
    67.   65 => '2468',
    68.   66 => '2527',
    69.   67 => '2692',
    70.   68 => '2450',
    71.   69 => '2469',
    72.   70 => '2530',
    73.   71 => '2528',
    74.   72 => '2448',
    75.   73 => '2470',
    76.   74 => '2688',
    77.   75 => '2473',
    78. )
    79.  
    80. $b =
    81.   2448 => '2448',
    82.   2990 => '2990',
    83.   2690 => '2690',
    84.   2688 => '2688',
    85.   2704 => '2704',
    86.   2705 => '2705',
    87.   2695 => '2695',
    88.   2700 => '2700',
    89.   2701 => '2701',
    90.   2702 => '2702',
    91.   2991 => '2991',
    92. )
    Надо что бы в массиве на выходе, ячейки где есть совпадение в массивах была единичка, а там где нету - нолик.

    Это я так понимаю через Array_map? ПОдскажите пожалуйста как?


    Например в массиве $a

    72 => '2448', заменялось на 72 => '1',


    Или это через array_udiff ? Хелп
     
    #1 social_project, 17 июл 2017
    Последнее редактирование: 17 июл 2017
  2. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    PHP:
    1. foreach($a as &$v){
    2.     (array_search($v,$b)) ? $v = 1 : $v = 0;
    3.     }
    4.     print_r($a);
     
    social_project и Алекс8 нравится это.
  3. social_project

    social_project Новичок

    С нами с:
    15 апр 2016
    Сообщения:
    11
    Симпатии:
    0
    Спасибо, а оно не отмально по нагрузке по идее... если у меня будет 10000 строк прокручивать, внтури которых нужна эта же проверка по 300 столбцам, то серверу просто печально будет...


    array_uintersect вот еще такое решение смотрю, оно по лучше по нагрузке?
    --- Добавлено ---
    PHP:
    1. function one_if_correct($v1,$v2)
    2. {
    3. if ($v1===$v2){
    4.  
    5.     return "1";
    6.     } else {
    7.  
    8.     return "";
    9.     };
    10. };
    11.  
    12.  
    13. $array_for_product_types_temp = array_uintersect($a, $b, "one_if_correct");
    Затык только с заменой получается, почему-то у меня не возрващает пустую или единичку в значения к итоговому массиву
     
  4. Алекс8

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

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    особой разницы ИМХО нет.. или цикл который Вы не видите это делает.. или цикл который Вы видите)) решение довольно таки интересное у alexblack
     
    social_project нравится это.
  5. social_project

    social_project Новичок

    С нами с:
    15 апр 2016
    Сообщения:
    11
    Симпатии:
    0
    Спасибо! Если нет разницы, то решение сработало спасибо!
     
  6. Алекс8

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

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    если массив не нравится попробуйте так))
    PHP:
    1. $r = array_intersect($a, $b);
    2. $res = array_map(function($i) use ($r) {
    3.     return (in_array($i, $r)) ? 1 : 0;
    4. }, $a);
    5. var_dump($res);
     
  7. t1grok

    t1grok Новичок

    С нами с:
    29 янв 2017
    Сообщения:
    119
    Симпатии:
    32
    Ссылка в цикле, один из способов прострелить себе ногу.
     
    villiwalla нравится это.
  8. Алекс8

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

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    почему?))
     
  9. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    через isset() за один проход можно сделать это.
    --- Добавлено ---
    под "один" я имею в виду вообще один, а не по одному на каждый член массива.
     
  10. t1grok

    t1grok Новичок

    С нами с:
    29 янв 2017
    Сообщения:
    119
    Симпатии:
    32
    Алекс8 нравится это.
  11. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
  12. Алекс8

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

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    как?))
     
  13. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    форыч по первому массиву, проверяешь иссетом во втором, в третий соотв нолик или единичку пишешь
     
  14. social_project

    social_project Новичок

    С нами с:
    15 апр 2016
    Сообщения:
    11
    Симпатии:
    0
    array search вполне живенько у меня работает
     
  15. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я про чистоту идеи