繁体   English   中英

如何在php多维数组中选择元素,如mysql中的WHERE

[英]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);
      }
    }

DEMO2

没有循环,你可以这样做:

$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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM