使用搜索条件对多维数组进行排序

时间:2011-05-23 22:55:53

标签: php arrays sorting

我正在使用FLAT FILE数据库。

行。只是为了消除所有“为什么不使用SQL”。我有。这是一个个人(学习)项目。我喜欢使用文本文件,想要修补。

所以2天以上我搜索了谷歌和S.O.并尝试了许多方法的变化。然而,他们没有得到我需要的东西。但我确实学到了正确的问题: - )

现在<在SQL中你可以这样做(因为sql基本上是一个奇特的数组)

SELECT * FROM [tablename] WHERE `some_field`='user_input1' ORDER BY `sequence_opt`;

我想在超过2000条记录的数据库中这样做。 (它们已被序列化以便于存储在文本文件中)

目前我这样做了:($ data_lib是2000多条记录,每条记录包含30个字段,但检索为

$data_lib[1]['a_field_name1']
$data_lib[2]['a_field_name2']
$data_lib[3]['a_field_name3']
$data_lib[4]['a_field_name etc...'])


 foreach($data_lib as $linenum=>$row)
            $sort[$linenum] = $row['some_field'];
            array_multisort($sort,SORT_DESC,$data_lib);

相当于 SELECT * FROM [tablename] ORDER BY`some_field'

完美的作品。我似乎无法做到这一点得到这个“在哪里”选择另一个字段作为标准。与第一个SELECT示例中一样。我不能让“WHERE”条款起作用。

现在我还没有看过一件事,就是我正在阅读数据库的原始方式 - 您认为问题存在吗? 我试过usort,但是我似乎把那些方式弄得乱七八糟,订单错了。

这个网站的所有信息都非常精彩,我的问题得到了很好的解答。

提前谢谢!!!

1 个答案:

答案 0 :(得分:1)

这样的事情应该做:

$results = array_filter($records, function ($row) {
     return $row['some_field'] == 'user input';
});
usort($results, function ($a, $b) {
     return $a['sequence_opt'] - $b['sequence_opt'];  // assuming numeric field

     // alternatively something like:
     // return $a['sequence_opt'] == $b['sequence_opt'] ? 0 :
     //        ($a['sequence_opt'] < $b['sequence_opt'] ? -1 : 1);
});

与SQL相比,它的效率确实不高。

如果这仍然困扰你,请指定一些更详细的输入和预期输出。