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

如何在PHP中按Kirki拖拽排序后的数组顺序输出内容?

解决Kirki拖拽排序数组的Switch Case执行问题

嘿,我帮你排查下问题所在,其实就是两个小细节出错导致代码没生效,咱们一步步来修正:

先说说你代码里的问题

  1. foreach循环写错了:你用了foreach ($array[0] as $key => $value),但你的$array是一维数组,$array[0]是第一个字符串元素"Big Grid 1"——遍历字符串的话,$key会变成字符的索引(0、1、2...),$value是单个字符,这完全不是你想要的遍历方式。
  2. 大小写不匹配:你switch里的case写的是'Big grid 1'(小写g),但数组里的元素是'Big Grid 1'(大写G),PHP的switch是大小写敏感的,这也会导致匹配失败。

修正后的完整解决方案

第一步:确认Kirki返回的数组

首先确保你正确获取到了Kirki设置的数组,假设你的设置键名是'your_grid_sort_setting'(替换成你实际的键名),先打印确认结构:

// 获取Kirki设置的排序数组
$grid_sort_array = get_option('your_grid_sort_setting');
// 打印数组确认结构(调试用,上线可以删掉)
var_dump($grid_sort_array);

调试时应该输出你提到的结构:

array(3) { [0]=> string(10) "Big Grid 1" [1]=> string(10) "Big Grid 2" [2]=> string(10) "Big Grid 3" }

第二步:正确遍历数组并执行Switch Case

直接遍历整个数组,每个元素就是你要匹配的网格名称,注意大小写完全一致:

// 先判断数组是否为空,避免报错
if (!empty($grid_sort_array)) {
    // 遍历排序后的数组,$item就是每个网格名称
    foreach ($grid_sort_array as $item) {
        switch ($item) {
            case 'Big Grid 1':
                // 这里写Big Grid 1对应的操作,比如输出内容或调用自定义函数
                echo '<section class="big-grid big-grid-1">';
                // 示例:调用显示Big Grid 1内容的函数
                // display_big_grid_1_content();
                echo '</section>';
                break;
            
            case 'Big Grid 2':
                echo '<section class="big-grid big-grid-2">';
                // display_big_grid_2_content();
                echo '</section>';
                break;
            
            case 'Big Grid 3':
                echo '<section class="big-grid big-grid-3">';
                // display_big_grid_3_content();
                echo '</section>';
                break;
            
            default:
                // 处理意外的未知项(比如新增了网格但没加case)
                echo '<section class="big-grid unknown-grid">未知网格:' . esc_html($item) . '</section>';
                break;
        }
    }
} else {
    // 如果用户没配置排序,显示提示
    echo '<p>请在后台配置网格排序规则</p>';
}

第三步:如果需要用到排序位置(可选)

如果你需要知道每个网格的排序位置(比如第1位、第2位),可以保留索引:

if (!empty($grid_sort_array)) {
    foreach ($grid_sort_array as $position => $item) {
        // $position是从0开始的索引,加1变成直观的排序号
        $sort_number = $position + 1;
        echo '<p>当前是第' . $sort_number . '个网格:</p>';
        
        switch ($item) {
            case 'Big Grid 1':
                echo '<section class="big-grid big-grid-1 sort-' . $sort_number . '">Big Grid 1(排序第' . $sort_number . ')</section>';
                break;
            // 其他case同上
        }
    }
}

额外提醒

  • 永远保持case里的字符串和数组元素完全一致,包括大小写、空格,不然匹配会失败。
  • 加上default分支可以避免新增网格项后出现无响应的情况,方便调试。

内容的提问来源于stack exchange,提问作者Emeka Emmanuel Oziri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:33:33