За последние 24 часа нас посетили 15540 программистов и 1612 роботов. Сейчас ищут 818 программистов ...

Исключить ключ из двух массивов

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

  1. Razorfen

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

    С нами с:
    2 авг 2016
    Сообщения:
    40
    Симпатии:
    0
    Привет.
    Дано два ассоциативных массива. Первый из них содержит ключ, который передается в переменной $num. Как сделать unset для этого ключа не только в первом, но и во втором массиве, учитывая, что ключ во втором массиве другой?

    Код (Text):
    1. <?php
    2.  
    3. $num = 1;
    4.  
    5. $entity = [
    6.   1 => "изготовление%20буклетов",
    7.   2 => "изготовление%20листовок",
    8. ];
    9.  
    10. $product = [
    11.   "fa fa-book" => "Буклеты",
    12.   "fa fa-paper-plane" => "Листовки",
    13. ];
    14.  
    15. //unset ?
     
  2. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    В переменной $num у Вас не хранится ключ ко второму массиву. Если воспринимать значение как порядковый номер элемента - возможно Вам поможет функция array_splice

    P.S.: если у Вас имеется связь между этими элементами - попробуйте ее описать для начала устно, а код для этого уже можно будет подобрать.
     
    #2 Maputo, 15 ноя 2017
    Последнее редактирование: 15 ноя 2017
    Razorfen нравится это.
  3. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @Razorfen, например:
    PHP:
    1. $num = 1;
    2. $entity = [
    3.   1 => "изготовление%20буклетов",
    4.   2 => "изготовление%20листовок",
    5. ];
    6. $product = [
    7.   "fa fa-book" => "Буклеты",
    8.   "fa fa-paper-plane" => "Листовки",
    9. ];
    10. var_dump($entity, $product);
    11. $ak1[1] = array_keys($entity);
    12. $ak1[2] = array_keys($product);
    13. $k = array_search($num, $ak1[1]);
    14. if(isset($entity[$num])) { unset($entity[$num]);}
    15. if($k !== false && isset($product[$ak1[2][$k]])) { unset($product[$ak1[2][$k]]);}
    16. var_dump($entity, $product);
    --- Добавлено ---
    Если действительно порядок элементов в массивах соблюдается :)
     
    Razorfen нравится это.
  4. Razorfen

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

    С нами с:
    2 авг 2016
    Сообщения:
    40
    Симпатии:
    0
    Спасибо.
    Передается get-параметр $num. Он мржет принимать значения 1, 2 и 3.
    Код выглядит следующим образом.
    Код (Text):
    1. <?php
    2.  
    3. $campaing_entity = [
    4.   1 => "изготовление буклетов",
    5.   2 => "изготовление листовок",
    6.   3 => "изготовление календарей",
    7. ];
    8.  
    9. $product = [
    10.   "fa fa-book" => "Буклеты",
    11.   "fa fa-paper-plane" => "Листовки",
    12.   "fa fa-calendar" => "Календари",
    13. ];
    14. $mi = new MultipleIterator();
    15. $mi->attachIterator(new ArrayIterator($campaing_entity));
    16. $mi->attachIterator(new ArrayIterator($product));
    17.     foreach($mi as $k=>$i){
    18.         echo "<a href=\"&utm_term=$i[0]\" class=\"pointer item\">".
    19.               "<i class=\"$k[1] fa-2x\" aria-hidden=\"true\"></i>".
    20.               "<br><br>$i[1]</a>\n";
    21.     }
    Пытаюсь сделать так, чтобы при соответствии $num ключу массива, этот ключ массива был удален.

    http://sandbox.onlinephpfunctions.com/code/4671835921bffea57cef30d0c4809cb0aaca1640
     
  5. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @Razorfen, что-то мне подсказывает, что в данном случае можно просто использовать двумерный массив:
    PHP:
    1. $campaing_entity = [
    2.   1 => [ "изготовление буклетов", "fa fa-book", "Буклеты" ],
    3.   2 => [ "изготовление листовок", "fa fa-paper-plane", "Листовки" ],
    4.   3 => [ "изготовление календарей", "fa fa-calendar", "Календари" ]
    5. ];
    Вы ведь с MultipleIterator практически такой же создаете, только имя класса извлекаете из ключа
     
    Razorfen нравится это.
  6. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @Razorfen, или так (вставка между 17-й и 18-й строчками):
    PHP:
    1.     if($num == $k[0]) {
    2.         unset($campaing_entity[$k[0]]);
    3.         unset($product[$k[1]]);
    4.         continue;
    5.     }
     
    Razorfen нравится это.