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

3

我正在使用平面文件数据库。

好的,为了排除所有“为什么不使用SQL”的问题。我已经使用过了。这是一个个人(学习)项目。我喜欢使用文本文件并想要尝试一下。

因此,我在谷歌和S.O.上搜索了2天,并尝试了许多方法,但它们并不能满足我的需求。但我确实学会了正确的提问方式 :-)

现在<在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'

它完美地工作。但是我似乎无法通过选择另一个字段作为条件来使用“WHERE”语句。就像第一个SELECT示例中一样。我无法让“WHERE”子句起作用。

现在,我还没有查看的一件事是我读取数据库的原始方式 - 你认为问题出在那里吗? 我尝试过usort,但是那种方法似乎会弄乱字段,而且顺序也不对。

这个网站提供的所有信息都非常棒,我的问题得到了完美的解答。

先谢谢你了!!!

1个回答

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 相比,它确实不太高效。

如果这对您仍然有问题,请提供更详细的输入和期望的输出。


嗯,让我插上它并看看它的工作原理。我同意,SQL 有更好的内置函数。但这就是学习一门语言的乐趣所在。感谢您的快速回复。我在使用 usort 上没有太多运气,但会尝试您的脚本。 - user761088

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接