我想知道是否有一個“簡單”的 PHP 解決方案來創建多個 URL 引數。到目前為止,我可以像這樣創建一個“一鍵式”過濾器:
$url_param = ($_GET["sort"]);
<a href="?sort=rank-chipset">Sort by this</a>
接著:
if($url_param == 'rank-chipset') {do this}
這非常適合作為過濾的“一鍵式”URL 引數!我喜歡這個簡單的解決方案來處理 URL 引數,但不知道如何做類似的事情,所以我可以讓用戶選擇多個引數,如品牌 1、品牌 2、2021 年等。
我希望這樣作業:如果用戶點擊brand1過濾器然后立即重新加載頁面并顯示brand1產品,如果還點擊brand2然后也顯示brand1和brand2產品。如果用戶再次點擊brand1,則從過濾中洗掉brand1。
uj5u.com熱心網友回復:
使filter引數成為以逗號分隔的過濾器串列。然后將現有值$_GET['filter']與該鏈接的過濾器結合起來。
function add_or_remove_filter($new, $filters) {
$pos = array_search($new, $filters);
if ($pos === false) {
// add if not found
$filters[] = $new;
} else {
/remove if found
unset($filters[$pos]);
}
return implode(',', $filters);
}
$filters = explode(',', $_GET['filter'] ?? '');
?>
<a href="?filter=<?php echo add_or_remove_filter("brand1", $filters); ?>">Brand 1</a>
<a href="?filter=<?php echo add_or_remove_filter("brand2", $filters); ?>">Brand 2</a>
<a href="?filter=<?php echo add_or_remove_filter("2021", $filters); ?>">Year 2021</a>
uj5u.com熱心網友回復:
如果您要設計一個直接在 url 中寫入導航歷史的解決方案,那么設定存盤的目標是輕松/快速的資料突變。
代碼:(未經測驗)
function toggleItem($item, $cache) {
if (isset($cache[$item])) {
unset($cache[$item]);
} else {
$cache[$item] = 1;
}
return $cache;
}
// show array_keys($_GET) as you wish
$allItems = ['a', 'b', 'c', 'd'];
foreach ($allItems as $item) {
printf(
'<a href="%s">%s</a>',
http_build_query(toggleItem($item, $_GET)),
$item
);
}
這樣做的好處是這些值始終存盤為陣列鍵。這意味著檢查它們的存在已針對速度進行了優化,http_build_query()并將確保生成有效的查詢字串。
如果您想將這些專案值保留在 的特定子陣列中$_GET,您也可以為此調整代碼段。您將使用它進行設定$_GET['nav'] ?? []并訪問array_keys($_GET['nav'] ?? []). 對這種性能提升的一個警告是 PHP 的陣列鍵可能不是浮點數——它們會自動轉換為整數。(我不知道你的物品的可變性。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/406106.html
標籤:
上一篇:Laravel:移動模型屬性位置
下一篇:搜索功能僅使用一個引數
