За последние 24 часа нас посетили 23233 программиста и 1699 роботов. Сейчас ищут 1616 программистов ...

Помогите решить задачку

Тема в разделе "Сделайте за меня", создана пользователем phpnoob2, 6 авг 2016.

  1. phpnoob2

    phpnoob2 Новичок

    С нами с:
    6 авг 2016
    Сообщения:
    6
    Симпатии:
    0
    Доброго времени суток,

    Помогите, пожалуйста, решить следующую задачу.

    Есть динамический массив:
    PHP:
    1. (
    2.     [0] => Array
    3.         (
    4.             [id] => 4
    5.             [header] => Глава 1.
    6.         )
    7.  
    8.     [1] => Array
    9.         (
    10.             [id] => 5
    11.             [header] => Глава 2.
    12.         )
    13.  
    14.     [2] => Array
    15.         (
    16.             [id] => 12
    17.             [header] => Глава 3.
    18.         )
    19.      [3] => Array
    20.         (
    21.             [id] => 44
    22.             [header] => Глава 4.
    23.         )
    24. )
    И динамическое(ключевое) значение одного из элементов массива (например id->5)

    Нужно получить значения id массивов выши и ниже ключевого, то есть 4 и 12 в виде обычной переменной.

    P.S> Можно кидать тапками.
    P.S>>Если интересно зачем это всё, то эти id(4 и 12) являются ссылками на следующую и предыдущую страницы для навигации.
     
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    У нас тут принято форматировать код. 1 балл на месяц. Ура.

    Рекомендую тебе так же научиться пользоваться мануалом. Есть готовая функция получения ключа с нужным тебе массивом, есть функция позиционирования на предыдущем и следующем ключе. Ура.
     
  3. phpnoob2

    phpnoob2 Новичок

    С нами с:
    6 авг 2016
    Сообщения:
    6
    Симпатии:
    0
    Спасибо за совет, про функции знаю, однако как их реализовать в моём случае так и не понял...
     
  4. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Наработки покажи
     
  5. phpnoob2

    phpnoob2 Новичок

    С нами с:
    6 авг 2016
    Сообщения:
    6
    Симпатии:
    0
    Я всё удалил, когда терпение закончилось. На форуме пишу в крайнем случае.

    Из последнего перебирал массив foreach, но в нём невозможно сместить ключ функциями prev, next.
     
  6. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Я тебя понял. Сам ты делать не хочешь. Можешь купить готовый код - тема переезжает во "фриланс". Денег нет - тема переезжает в "за меня". Переезжает по-любому. От тебя зависит куда.
     
  7. phpnoob2

    phpnoob2 Новичок

    С нами с:
    6 авг 2016
    Сообщения:
    6
    Симпатии:
    0
    Тема для новичков и если тебе лениво нажать пару кнопок, но при этом ты с удовольствием любишь поучить других, то будь добр, проходи мимо.
     
  8. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Да, для новичков. Но для тех, которые хотят учиться. И не удаляют код чтоб нечего было показать. Не хочешь учиться - проходи мимо раздела новичков. Ты к ним относишься только скилом. Желаниями ты относишься к халявщикам из "за меня". Туда тема и переезжает.
     
  9. phpnoob2

    phpnoob2 Новичок

    С нами с:
    6 авг 2016
    Сообщения:
    6
    Симпатии:
    0
    Удачи в твоём нелёгком труде вахтёра.
     
  10. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    PHP:
    1. <?php
    2.  
    3. // Объявляем пустышки предыдущего и следующего элементов.
    4. $prev = $next = null;
    5.  
    6. // Объявляем массив. Я задрался его перегонять из формата print_r в человеческий.
    7. // Научись var_export.
    8. $a = [
    9.     [
    10.         'id' => '4',
    11.         'header' => 'Глава 1.',
    12.     ],
    13.     [ 'id' => '5',
    14.         'header' => 'Глава 2.',
    15.     ],
    16.     [
    17.         'id' => '12',
    18.         'header' => 'Глава 3.',
    19.     ],
    20.     [
    21.         'id' => '44',
    22.         'header' => 'Глава 4.',
    23.     ],
    24. ];
    25.  
    26. // Ищем айдишник.
    27. $ck = array_search('12', array_column($a, 'id'));
    28.  
    29. // Предыдущий будет иметь ключ на единицу меньше найденного.
    30. $pk = $ck-1;
    31.  
    32. // Проверяем выход за границу массива слева.
    33. // Меньше нулевого офсета быть не может.
    34. if (0 <= $pk)
    35. {
    36.     // Вот он наш предыдущий элемент.
    37.     $prev = $a[$pk];
    38. }
    39.  
    40. // Следующий будет иметь ключ на единицу больше найденного.
    41. $nk = $ck+1;
    42.  
    43. // Проверяем выход за границу массива справа.
    44. // Больше длины массива офсет быть не может.
    45. if (count($a) > $nk)
    46. {
    47.     // Вот он наш следующий элемент.
    48.     $next = $a[$nk];
    49. }
    50.  
    51. // Напечатаем же их на экранчик.
    52. var_dump($prev, $next);
    53.  
    54. # eof
    Код (Text):
    1. array(2) {
    2.   ["id"]=>
    3.   string(1) "5"
    4.   ["header"]=>
    5.   string(13) "Глава 2."
    6. }
    7. array(2) {
    8.   ["id"]=>
    9.   string(2) "44"
    10.   ["header"]=>
    11.   string(13) "Глава 4."
    12. }
    Спасибки. А тебе и дальше оставаться таким же ленивым. Ну и возможно тупым.
    Лайкнуть не забуть.
     
    denis01 и phpnoob2 нравится это.
  11. phpnoob2

    phpnoob2 Новичок

    С нами с:
    6 авг 2016
    Сообщения:
    6
    Симпатии:
    0
    Спасибо, лайкнул.

    Да я нуб и только учу php, поэтому опытным программистам любой вопрос может казаться глупым.

    К текущему моменту я разобрался получше и непонятным момент осталось только то, как найти линейный индекс массива по какому-либо его значению.

    Я полагаю, что эту функцию выполняет данная вами строчка, но у меня, к сожалению php 5.3 и нет функции array_column.
    PHP:
    1. $ck = array_search('12', array_column($a, 'id'));
    id выше и ниже я найду так:
    Код (Text):
    1. $a[i+1]['id'];
    2. $a[i-1]['id'];
     
  12. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Обновись. 5.3 давно умерла. Текущая актуальная - 7.0. Из пятёрок - 5.6 уже доживает. Это касательно отсутствия функции.
    Нуб ты не только в пыхе но и в программировании в целом. Всё что я написал - простой алгоритм взаимодействия с массивом данных. Не более того. Можно придумать еще несколько вариантов. И некоторыми из них обойти отсутствие нужных функций на том говне мамонта, которым ты пользуешься.
     
  13. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Ganzal, Sergey108 и denis01 нравится это.