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

PHP按title属性对嵌套数组字母排序报错:title未定义

嵌套数组按指定字段排序问题解决

问题说明

需要将数组中area为TACT的项内的pages子数组,按title字段的字母顺序排序,但直接使用usort排序整个主数组时,出现'title'未定义的错误。

原数组结构

My Array
(
    [0] => Array
        (
            [area] => TACT
            [pages] => Array
                (
                    [0] => Array
                        (
                            [id] => 1484
                            [title] => Registry
                        )

                    [1] => Array
                        (
                            [id] => 1385
                            [title] => Education
                        )
                )
        )
)

期望排序后的数组

My Array
(
    [0] => Array
        (
            [area] => TACT
            [pages] => Array
                (
                    [0] => Array
                        (
                            [id] => 1385
                            [title] => Education
                        )

                    [1] => Array
                        (
                            [id] => 1484
                            [title] => Registry
                        )
                )
        )
)

错误代码分析

之前尝试的代码直接对主数组$myArray调用usort,但主数组的元素是包含area和pages的数组,本身没有title键,因此会触发未定义错误:

function sort_alpha_title($a, $b) {
    return strnatcmp($a['title'], $b['title']);
}

usort($myArray, 'sort_alpha_title');

正确解决方案

需要先遍历主数组,定位到area为TACT的项,再对该项的pages子数组执行排序:

方案1:使用独立排序函数

// 定义按title自然排序的函数
function sort_alpha_title($a, $b) {
    return strnatcmp($a['title'], $b['title']);
}

// 遍历主数组,找到目标项并排序pages子数组
foreach ($myArray as &$item) {
    if ($item['area'] === 'TACT') {
        usort($item['pages'], 'sort_alpha_title');
    }
}
// 解除引用,避免后续操作污染原数组
unset($item);

方案2:使用匿名函数(更简洁)

foreach ($myArray as &$item) {
    if ($item['area'] === 'TACT') {
        usort($item['pages'], function($a, $b) {
            return strnatcmp($a['title'], $b['title']);
        });
    }
}
unset($item);

这样操作后,只有area为TACT的项内的pages子数组会按title字母顺序排序,且不会触发title未定义的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:45:35