You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP使用usort对WordPress标签对象数组按slug排序失效问题

问题核心原因

PHP函数作用域限制,你定义的$tagPriorityMap属于全局变量,默认情况下函数内部无法直接访问全局作用域的变量,sort_tags函数内读取的$tagPriorityMap是未定义的局部变量,因此无法返回对应值。

修复方案

推荐优先使用第一种方案,避免全局变量污染:

  • 方法1:使用匿名函数作为回调,通过use关键字引入优先级映射数组(PHP 5.3及以上版本支持)
$tagPriorityMap = array(
  "research" => 0,
  "strategy" => 1,
  "naming" => 2,
  "identity" => 3,
  "packaging" => 4,
  "environment" => 5,
  "digital" => 6,
);
// $yourTagsArray替换为你实际要排序的标签数组变量名
usort($yourTagsArray, function ($a, $b) use ($tagPriorityMap) {
  // 加??999是为了处理slug不在优先级映射里的情况,避免报错,不在列表的标签会统一排在最后
  $aPriority = $tagPriorityMap[$a->slug] ?? 999;
  $bPriority = $tagPriorityMap[$b->slug] ?? 999;
  if ($aPriority == $bPriority) {
    return 0;
  }
  return $aPriority < $bPriority ? -1 : 1;
});
  • 方法2:在自定义函数内用global关键字声明引入全局变量(不推荐,全局变量易被意外修改引发问题)
$tagPriorityMap = array(
  "research" => 0,
  "strategy" => 1,
  "naming" => 2,
  "identity" => 3,
  "packaging" => 4,
  "environment" => 5,
  "digital" => 6,
);
function sort_tags($a, $b) {
  global $tagPriorityMap;
  $aPriority = $tagPriorityMap[$a->slug] ?? 999;
  $bPriority = $tagPriorityMap[$b->slug] ?? 999;
  if ($aPriority == $bPriority) {
    return 0;
  }
  return $aPriority < $bPriority ? -1 : 1;
}
usort($yourTagsArray, 'sort_tags');

内容的提问来源于stack exchange,提问作者Matt Anderson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:36:01