我有這樣的多維陣列:
$obj = array(
"a" => array(
"aa" => array(
"aaa" => 1
),
"bb" => 2,
),
"b" => array(
"ba" => 3,
"bb" => 4,
),
"c" => array(
"ca" => 5,
"cb" => 6,
),
);
我想不出一種最簡潔的方法,例如自定義深度函式,以函式(或鍵名陣列)的引數在特定位置提取專案。例如:
echo $obj[someFunc("a", "aa", "aaa")];
...應該回傳1。
print_r($obj[someFunc("a")]);
...應該回傳:
Array
(
[aa] => Array
(
[aaa] => 1
)
[bb] => 2
)
使用 php7 功能完成此任務的最佳方法是什么?
uj5u.com熱心網友回復:
自 PHP 5.6 起,["Variadic functions"][1] 已經存在。這些為我們提供了一種簡單易讀的方式來將呼叫函式時使用的引數收集到單個陣列中。例如:
function getValue(...$parts) {
var_dump($parts);
}
getValue('test', 'part');
將輸出:
array(2) {
[0]=>
string(4) "test"
[1]=>
string(4) "part"
}
在使用內置函式獲取引數之前,這一切都是可能的,但這更具可讀性。
你也可以對引數型別更明確一點,但如果有必要,我會把它留給你自己弄清楚。
您的下一個主要挑戰是遍歷論點。這樣的事情會產生你想要的價值。
function getValue(...$parts) {
$returnValue = $obj;
foreach ($parts as $part) {
$returnValue = $obj[$part];
}
return $returnValue;
}
但是,這是相當粗糙的代碼,當您嘗試呼叫它來訪問不存在的部分時會出錯。玩一玩并修復這些位。[1]:https : //www.php.net/manual/en/functions.arguments.php#functions.variable-arg-list
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/409633.html
標籤:
