首页 > 解决方案 > 从字符串为 Mongo 创建 PHP 数组

问题描述

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;
}

我想我可以使用??运算符,但我必须形成一个数组“检查”含义:$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 并且它不适用于这个.. 多维和非数字..

谢谢你。

标签: phparraysmongodblaravel-5

解决方案


如果我理解正确,您想获取输入字符串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
                        (
                        )
                )
        )
)

希望你的意思。如果不能随意评论


推荐阅读