За последние 24 часа нас посетили 22155 программистов и 1153 робота. Сейчас ищут 364 программиста ...

Как получить ключ массива из строки?

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

  1. Sergey_Tsarev

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

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    Всем привет!
    Такой вопрос:
    В цикле, в многомерный массив должны добавляться данные. Проблема в том, что вложенность в массиве может быть разная и имена ключей приходят из функции. Если бы был один ключ, то и проблем не было бы. Можно было бы написать:
    PHP:
    1. foreach($arr as $data) {
    2.      $key = $this->getKey();
    3.      $newArr[$key] = $data;
    4. }
    Но ключ может быть как один, так и пять и десять. Вопрос в том, в каком виде вернуть ключи из функции, чтобы можно было из вставить в массив.
    Чувствую, что где-то туплю. 16 часов уже за компом и видимо башка совсем не варит ;)
     
  2. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    https://www.php.net/manual/ru/function.unserialize.php
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.750
    Симпатии:
    1.322
    Адрес:
    Лень
    key может быть либо типа integer, либо типа string. value может быть любого типа.
    https://www.php.net/manual/ru/language.types.array.php
    --- Добавлено ---
    еще шапка не соответствует с текстом == вода
     
  4. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    ТС хочет преобразовывать строку вида key,key1,key2,key3 в ключи многомерного массива.
    Нормальная шапка.
     
    Sergey_Tsarev нравится это.
  5. Sergey_Tsarev

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

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    Да типы ключей это понятно. Мне нужно данные приходящие из функции преобразовать в индекс. Примерно так:

    PHP:
    1. $array = [];
    2. $path = getPath();
    3. //$path = (string) "key,1,foo,2,3"
    4.  
    5. //строку $path нужно конвертировать в ключи чтобы получилось так
    6. $array['key'][1]['foo'][2][3] = "Hello, World!";
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.750
    Симпатии:
    1.322
    Адрес:
    Лень
  7. Sergey_Tsarev

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

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    Спасибо. Я до этого пробовал сделать при помощи ссылок (указателей), но какая-то ерунда получалась. А по Вашему примеру сделал и всё заработало.
    Вот такая функция получилась:
    PHP:
    1. public function getArray() {
    2.  
    3.     $result = array();//результирующий массив
    4.  
    5.     $path = $this->getPath();//получаем массив ключей
    6.  
    7.     $tmp = &$result;//создаем временную переменную с ссылкой на результирующий массив. Этого можно не делать, но так как у меня функция более сложная, то такая переменная мне необходима. В данной функции её можно убрать.
    8.  
    9.     foreach($path as $key) {//перебираем массив с ключами
    10.         $tmp = &$tmp[$key];//добавляем ссылку на ключ
    11.     }
    12.     $tmp = "Привет, Мир!";//записываем данные
    13.      
    14.     return $result;//возвращаем готовый массив
    15. }