使用php过滤搜索结果
无法通过Google真的找到任何有用的信息,所以希望有人在这里有一些知识可以帮助。我有一组从多维数组中拉出的结果。目前,数组键是产品的价格,而该项目包含另一个包含所有产品细节的数组。使用php过滤搜索结果
key=>Item(name=>test, foo=>bar)
所以目前当我列出的项目,我只是按键排序,最小的第一个,它列出了产品最低的价格第一。
不过,我想在此建,这样当用户看到的结果,他们可以从下拉框中选择一个名字,某些生产厂家,颜色,X,Y,Z等等等等其他排序选项,如列表中的所有产品(或类似的东西)
这是我需要一些指导的地方。我只是不知道如何去做或最好的做法或任何事情。我能想到的唯一方法是通过嵌套数组命名所有项目,例如名称,制造商等,但我该如何在PHP中执行此操作?
希望你明白什么即时通讯试图实现(如果不只是问)。任何关于这个想法,方法或例子的帮助都会很棒。
感谢您使用PHP5
更新例如使用内存数据库中的小片段:) PS:是不是需要在所有因为我检查输入布尔本例中的XSS保护值。看到相反的顺序结果指定order?desc
<?php
/* XSS-protection. */
$_GET = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);
$array = array(
"ActionScript",
"AppleScript",
"Asp",
"BASIC",
"C",
"C++",
"Clojure",
"COBOL",
"ColdFusion",
"Erlang",
"Fortran",
"Groovy",
"Haskell",
"Java",
"JavaScript",
"Lisp",
"Perl",
"PHP",
"Python",
"Ruby",
"Scala",
"Scheme"
);
function createTable($db) {
$db->exec("CREATE TABLE IF NOT EXISTS tags (id INTEGER PRIMARY KEY, tag TEXT NOT NULL UNIQUE)");
}
function insertData($db, $array) {
$db->beginTransaction();
foreach($array as $elm) {
try {
$stmt = $db->prepare("INSERT INTO tags (tag) VALUES (:tag)");
$stmt->execute(array(
":tag" => $elm
));
} catch(PDOException $e) {
/*** roll back the transaction if we fail ***/
$db->rollback();
/*** echo the sql statement and error message ***/
echo $sql . '<br />' . $e->getMessage();
}
}
$db->commit();
}
$db = new PDO('sqlite::memory:');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
//
createTable($db);
insertData($db, $array);
$order = "ASC";
if (strtoupper($_GET['order']) == "DESC") {
$order = "DESC";
}
$stmt = $db->prepare("SELECT * FROM tags ORDER BY tag $order");
$stmt->execute();
$data = array();
while($row = $stmt->fetch()) {
$data[] = array($row['tag']);
}
echo json_encode($data);
希望你明白我尝试 实现(如果不是只问)。在 任何帮助的想法,接近或 例子将是巨大的。
首先我有几个问题你说你使用的是PHP5。你如何检索你的数据(RDBMS)?如果不是,PHP5有SQLite enabled by default。我认为你应该至少使用RDBMS(SQLite/etc)来为你完成繁重的工作。
当你没有在PHP任何排序learn SQL。我想这PDO tutorial,同时给你内部如何安全地使用SQL。 SQL很容易受到SQL注入的影响,但是由于PDO准备好的语句,您不必再担心这一点。
我有一组结果是从多维数组中拉出的 。 目前阵列关键是产品的价格 而项目包含 包含所有 产品细节另一个数组。
使用ORDER BY进行订购。我会使用一个数据表来做排序客户端。还保险你在服务器上工作(PHP)。你可以看看YUI2's datatable。
听起来像是你不知道你想要什么阅读
P.S林。你想过滤还是分类?过滤只会显示某种类型的东西。排序会按顺序显示某些内容,并且通过本质聚集在一起。
要进行过滤,请在打印结果之前遍历数组,然后检查结果是否符合条件。
伪代码:
foreach $results as $result
if ($result['type']==$filtertype)
echo $result['name'];
编辑
对于排序多维数组,你可以使用另一个阵列的抱着你要排序的具体列的键和值在排序值,同时保留键。然后循环访问该数组以获得所需的顺序。并使用排序后的单维数组的键来访问原始结果数组的值。
foreach ($results as $key=>$data) {
$sort[$key]=$data['name'];
}
asort($sort);
foreach ($sort as $key=>$value) {
echo $results[$key]['name'];
echo $results[$key]['category'];
//etc etc
}
首先,使用价格作为关键是不是真的最好的方式去;如果两种产品具有相同的价格,他们会覆盖彼此。最好使用唯一键(默认键),并将价格放在子数组中。
然后,您可以使用函数usort对数组进行排序。
$array = array(
array('price' => 1000, 'name' => 'Expensive and useless stuff'),
array('price' => 2.3, 'name' => 'Cheap and useful stuff')
);
$sortby = 'price'; // or name, in this example
$code = 'if($product1["'.$sortby.'"] == $product2["'.$sortby.'"]) return 0; return ($func_a < $func_b) ? -1 : 1;';
usort($array, create_function('$product1,$product2', $code));
感谢您的答复。对不起,我有问题是根据子数组的值排序主数组。 例如: 产品1个子阵列具有FOO的一个名称。 产品2子数组的名称为bar。 产品3子阵列的名称为baz。 我想通过名称订购的主阵列 – fl3x7 2011-01-28 20:31:07
好,我编辑和添加多维数组排序。 – profitphp 2011-01-28 20:34:03
非常感谢。去尝试这个:) – fl3x7 2011-01-28 22:24:20