簡體   English   中英

從字符串為 Mongo 創建 PHP 數組

[英]Create PHP array from string for Mongo

我有一個Laravel安裝Moloquent (蒙戈)。 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 並且它不適用於此.. 多維和非數字..

謝謝你。

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

希望是你的意思。 如果不方便發表評論

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM