[英]How to select element in a php multi dimentional array like the WHERE in mysql
在这样的数组中:
Array
(
[1] => Array
(
[name] => boat
[id] => 2
)
[2] => Array
(
[name] => house
[id] => 5
)
)
在php中,如何选择“id”等于5的元素“name”? (屋)
(使用id 5来拥有“house”)
编辑:我可以避免循环吗? 可能耗电量少吗?
你必须直接或间接循环(在内置方法中)。对于你的关注,这个循环将使用更少的功率。
试试这样:
foreach($your_array as $a){
if(in_array(5,$a)){ //check if 5 in this sub array
print_r($a);
}
}
如果你想检查多个ID,那么你可以这样做:
$ids= array(1,3,5); //make an array of ids you want to filter
foreach($array as $a){
if(in_array($a["id"],$ids)){
print_r($a);
}
}
没有循环,你可以这样做:
$result = array_filter($your_array, function($arg) {
return $arg['id'] == 5;
});
这将返回一个数组,其中只包含匹配的主数组部分。 如果你需要使用变量,那么这样做:
$var = 5;
$result = array_filter($your_array, function($arg) use $var {
return $arg['id'] == $var;
});
这是另一个有趣的:
echo array_column($array, 'name', 'id')[5];
如果您的数据不能很好地适应您的模式,请考虑切换到MongoDB之类的东西。 从他们的文档 :
项目阵列文档
学生集合包含以下文档,其中成绩字段是一系列文档; 每个文档包含三个字段名称grade,mean和std:
{ "_id" : 7, semester: 3, "grades" : [ { grade: 80, mean: 75, std: 8 },
{ grade: 85, mean: 90, std: 5 },
{ grade: 90, mean: 85, std: 3 } ] }
{ "_id" : 8, semester: 3, "grades" : [ { grade: 92, mean: 88, std: 8 },
{ grade: 78, mean: 90, std: 5 },
{ grade: 88, mean: 85, std: 3 } ] }
在以下查询中,投影{“grades。$”:1}仅返回grade字段中平均值大于70的第一个元素:
db.students.find(
{ "grades.mean": { $gt: 70 } },
{ "grades.$": 1 }
)
该操作返回以下文档:
{ "_id" : 7, "grades" : [ { "grade" : 80, "mean" : 75, "std" : 8 } ] }
{ "_id" : 8, "grades" : [ { "grade" : 92, "mean" : 88, "std" : 8 } ] }
用PHP编写,这个查询看起来像:
$mongoClient = new MongoClient("mongodb://localhost");
$students = $mongoClient->selectCollection("db", "students");
$query = array("grades.mean" => array('$gt' => 70));
$fields = array("grades.$" => 1);
$result = $students->find($query, $fields);
foreach($result as $grades) {
print_r($grades);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.