我正在开发一个项目,我有一个像这样的结构化对象:
$main_array= [
[
"key"=> "home",
"value":=> "Go Home!"
],
[
"key"=> "business",
"value"=> "Go to Work!"
],
[
"key"=> "other",
"value"=> "Go where you want!"
]
]
我想知道是否有办法根据“key”参数检索对象。我想要做的是“提取”嵌套数组
$home_array=["key"=> "home","value":=> "Go Home!"]
对于“商业”和“他人”等等。在javascript中,我可以使用jquery或下划线来获得我想要的东西,是否有一个PHP方法来实现这一点,或者在多维数组/对象中模拟“where”子句?
先感谢您
您可以使用array_column()
轻松转换您拥有'key'列的数组作为主索引...
$main_array= [
[
"key"=> "home",
"value"=> "Go Home!"
],
[
"key"=> "business",
"value"=> "Go to Work!"
],
[
"key"=> "other",
"value"=> "Go where you want!"
]
];
$out = array_column($main_array, null, "key");
print_r($out['business']);
输出...
Array
(
[key] => business
[value] => Go to Work!
)
获得与特定键匹配的单个项目的几种可能性:
$object = (function($key) use($main_array) {
foreach ($main_array as $object) {
if ($object['key'] == $key) return $object;
}
})('business');
(此示例使用匿名函数,但您可以使用简单的foreach循环并在找到密钥时中断。)$indexed = array_column($main_array, null, 'key');
$object = $indexed['business'];
$main_array= [
'home' => ["value"=> "Go Home!"],
'business' => ["value"=> "Go to Work!"],
'other' => ["value"=> "Go where you want!"]
];
方法2和3要求它们的密钥是唯一的。方法1没有,但它只返回它找到的第一个实例。
如果你有多个密钥实例,你可能需要array_filter
。这将更像你提到的“where子句”。
$key = 'home';
$filtered = array_filter($main_array, function($item) use ($key) {
return $item['key'] == $key;
});
这将返回多个项目而不是一个。