我正在使用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,但是我似乎把那些方式弄得乱七八糟,订单错了。
这个网站的所有信息都非常精彩,我的问题得到了很好的解答。
提前谢谢!!!
答案 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相比,它的效率确实不高。
如果这仍然困扰你,请指定一些更详细的输入和预期输出。