Создать массив PHP из строки для Mongo - PullRequest
0 голосов
/ 07 января 2019

У меня установлена ​​Laravel с Moloquent (Mongo). Mongo не обязательно проблема, когда модель загружает запись "JSON", она становится ассоциативным массивом PHP. Мне нужно иметь возможность создать функцию в модели, которая возвращает элемент массива в виде строки.

например:

$search1 = 'folder1/folder2/folder3/item';
//would look like: $array['folder1'][folder2'][folder3']['item']
$search2 = 'folder1/picture1/picture'; 
//would look like: $array['folder1'][picture1']['picture']

echo getRecord($search1);
echo getRecord($search2);    

function getRecord($str='') {
  //this function take path as string and return array
  return $result;
}

Полагаю, я мог бы использовать оператор ??, но мне нужно сформировать массив "check", означающий: Как бы я сформировал $array['1']['2']['3'], если у меня есть 3 элемента глубиной или 1 ($array['1']), или 5 ($array['1']['2']['3']['4']['5']).

Я создаю API для добавления элемента или папки в Mongo.

Ввод : "f1/f2/item"

Эта функция у меня есть:

echo print_r($j->_arrayBuilder('f1/f2/item'), true);
public function _arrayBuilder($folderPath)
{
    $ret = array();
    $arr = explode('/', $folderPath);
    Log::info("Path Array:\n" . print_r($arr, true));
    $x = count($arr) - 1;
    Log::info("Count: " . $x);
    for ($i = 0; $i <= $x; $i++) {
        Log::info("Element of arr: " . $arr[$i]);
        $ret = array($arr[$i] => $ret);
    }
    return $ret;
}

Токовый выход :

Array
(
    [item] => Array
        (
            [f2] => Array
                (
                    [f1] => Array
                        (
                         )
                )
        )
)

Желаемый выход:

Array
(
    [f1] => Array
        (
            [f2] => Array
                (
                    [item] => Array
                        (
                         )
                )
        )
)

Примечание: я пробовал PHP array_reverse, и он не работает на этом .. Многомерный и не числовой ..

Спасибо.

1 Ответ

0 голосов
/ 07 января 2019

Если я правильно понимаю, Вы хотите взять входную строку f1/f2/f3/f4/f5/item и создать array("f1" => array("f2" => array("f3" => array("f4" => array("f5" => array("item" => array()))))))

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

function buildArr($path) {
    $path = array_reverse(explode("/", $path)); // getting the path and reverse it
    $ret = array();
    foreach($path as $key)
        $ret = array($key => $ret);
    return $ret;
}

Для ввода print_r(buildArr("f1/f2/item")); выводится:

Array
(
    [f1] => Array
        (
            [f2] => Array
                (
                    [item] => Array
                        (
                        )
                )
        )
)

Надеюсь, что вы имели в виду. Если нет, не стесняйтесь комментировать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...