За последние 24 часа нас посетили 16752 программиста и 1643 робота. Сейчас ищет 961 программист ...

Переместить элемент массива в другой индекс

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

  1. JonyFront

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

    С нами с:
    5 июн 2016
    Сообщения:
    143
    Симпатии:
    1
    Добрый день, есть массив https://pastebin.com/urFwD9Ju , мне нужно первый элемент с option_id = m, переместить перед элементом option_id = 10015 (Модель), подскажите пожалуйста функцию для многомерного массива, или сколько стоит такая помощь, спасибо!
     
  2. JonyFront

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

    С нами с:
    5 июн 2016
    Сообщения:
    143
    Симпатии:
    1
    Нашел такие функции:
    PHP:
    1. function array_remove($array, $index) {
    2.     array_splice($array, $index, 1, array());
    3.     return $array;
    4. }
    5.  
    6. function array_insert($array, $element, $index) {
    7.     array_splice($array, $index, 0, array($element));
    8.     return $array;
    9. }
    10.  
    11. function array_move($array, $from, $to) {
    12.     $element = $array[$from];
    13.     $array = array_remove($array, $from);
    14.     $array = array_insert($array, $element, $to - 1);
    15.     return $array;
    16. }
    17.  
    18. $array = array_move($array, 0, 4);
    19. print_r($array);
    Работает, но тут нужно знать четкий индекс, а он у меня может быть разный, мне нужно всегда именно перед элементом с option_id = 10015, потом ищу индекс нужного мне элемента
    PHP:
    1. function searchForId($id, $array) {
    2.    foreach ($array as $key => $val) {
    3.        if ($val['option_id'] === $id) {
    4.            return $key;
    5.        }
    6.    }
    7.    return null;
    8. }
    В итогу работает как нужно, но вопрос по скорости работы, на сколько правильно такое решение? Если заранее обработать массив нельзя. Возможно есть какое-то решение проще и быстрее, или это нормальное?
     
  3. roboformation

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

    С нами с:
    30 авг 2020
    Сообщения:
    162
    Симпатии:
    40
    У вас одновременно оба элемента (подмассив с элементом ["option_id"] => "m" и подмассив с элементом ["option_id"] => "10015") могут совершенно в разных местах находиться, я правильно понял?
     
  4. JonyFront

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

    С нами с:
    5 июн 2016
    Сообщения:
    143
    Симпатии:
    1
    Только по индексам, массив один и тот же
     
  5. roboformation

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

    С нами с:
    30 авг 2020
    Сообщения:
    162
    Симпатии:
    40
    Можете изменить searchForId() на вот это
    PHP:
    1. function searchForId($id, $array) {
    2.    return array_search($id, array_column($array, "option_id"));
    3. }
     
    JonyFront нравится это.