如何在PHP中按Kirki拖拽排序后的数组顺序输出内容?
解决Kirki拖拽排序数组的Switch Case执行问题
嘿,我帮你排查下问题所在,其实就是两个小细节出错导致代码没生效,咱们一步步来修正:
先说说你代码里的问题
- foreach循环写错了:你用了
foreach ($array[0] as $key => $value),但你的$array是一维数组,$array[0]是第一个字符串元素"Big Grid 1"——遍历字符串的话,$key会变成字符的索引(0、1、2...),$value是单个字符,这完全不是你想要的遍历方式。 - 大小写不匹配:你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
相关产品推荐
相关产品推荐

