sort、asort、ksort 三者说明

PHP数组操作与技巧
本文介绍了PHP中数组排序函数如sort、asort和ksort的使用方法,展示了字符串及数组处理技巧,包括翻转、获取文件后缀名的不同方式,以及PHP会话ID的生成原理等。

sort、asort、ksort  都是对php中的数组进行排序

$fruits = array("lemon", "orange","apple" ,"banana");
sort($fruits);     //todo sort 按英文字母升序排序
asort($fruits);     //todo asort按照字母升序排序,并且单元的“索引”关系不变
ksort($fruits);      //todo ksort 按照”键值“字母升序排序


随便记录一下:

$str = strrev($str); //字符翻转
echo ltrim(strrev(chunk_split($str,3,'.')),'.');
array_reverse($array); //数组翻转

php错误级别代码块:

error_reporting(0);  //关闭所有错误提示,包括E_ALL错误
error_reporting(E_ALL ^ E_NOTICE); //展示所有错误,除了那些没有对我们没有害的提示 error_reporting(E_ALL &~ E_NOTICE)
error_reporting(E_ALL); //错误所有错误,包括错误也展示出来
htmlspecialchars 和htmlentities的区别
htmlspecialchars 只转化、 单引号、双引号、&符号
htmlentities 会转化所有的html符号

获取后缀名的五种方法:

$filename = __FILE__;

echo getExeV5($filename);

/**
 * TODO 方法 strrpos 容易忘记
 * @param $path
 * @return string
 */
function getExeV1($path)
{
    return substr($path, strrpos($path, '.'));
}

/**
 * TODO 方法 strrchr  容易忘记
 * @param $path
 * @return string
 */
function getExeV2($path)
{
    return strrchr($path, '.');
}

/**
 * 这个肯定会的
 * @param $path
 * @return mixed
 */
function getExeV3($path)
{
    $arr = explode('.', $path);
    return $arr[count($arr) - 1];
}

/**
 * TODO 这里一条不会
 * @param $path
 * @return mixed
 */
function getExeV4($path)
{
    $arr = pathinfo($path); //获取路径的所有信息
    return $arr['extension'];
}

/**
 * TODO 这里一条不会
 * @param $path
 * @return mixed
 */
function getExeV5($path){
    return pathinfo($path,PATHINFO_EXTENSION);
}

正则方式:

//.*? 表示任意0个获取多个任意字符
$script1 = "333<script type='text/javascript'></script>";
$reg = '/<script[^>]*?>.*?<\/script>/si';

preg_match($reg, $script1, $match);
print_r($match);

php的双向队列

$user = array('keys');
array_unshift($user,'j3jj33');  //向数组添加【头部】添加一个值
array_push($user,'tte'); // 向数组中的【尾部】添加一个值
array_pop($user); //向数组【尾部】弹出一个值
array_shift($user); //向数组中的【头部】弹出一个值
class deQue
{
    /**
     * @var array
     */
    private static $queue = array();

    /**
     * 向数组添加【头部】添加一个值
     * @param $item
     */
    public static function addFirst($item)
    {
        array_unshift(self::$queue, $item);
    }

    /**
     * 向数组中的【尾部】添加一个值
     * @param $item
     */
    public static function addLast($item)
    {
        array_push(self::$queue, $item);
    }

    /**
     * 向数组中的【头部】弹出一个值
     */
    public static function removeFirst()
    {
        array_shift(self::$queue);
    }

    /**
     *  向数组中的【头部】弹出一个值
     */
    public static function removeLast()
    {
        array_pop(self::$queue);
    }
}

Http无状态

HTTP无状态协议是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。


sessionId 的生成过程。

php会话ID是如何产生的?PHP默认的session id生成算法介绍

    以php5.3.6的源码为例,进入/ext/session目录,生成session id的函数位于session.c文件的345行,c语言函数原型如下:

PHPAPI char *php_session_create_id(PS_CREATE_SID_ARGS);




<think>首先,用户的问题是:“我想了解关联数组使用sort进行排序的相关内容 请问关联数组使用sort方法排序的原理、用法及示例”。 注意,系统级指令要求: - 所有行内数学表达式必须使用 $...$ 格式。 - 独立公式必须使用 $$...$$ 格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。 此外,用户提供了三个引用: - 引用[1]:关于PHP数组排序函数,包括sort()、rsort()、asort()、arsort()等。 - 引用[2]:关于SystemVerilog中find在队列及关联数组中的使用。 - 引用[3]:关于PHP中数组的使用,包括索引数组、关联数组等。 用户明确指定关联数组使用sort进行排序,并询问原理、用法及示例。引用[1]中提到了PHPsort()、asort()等函数,这些与关联数组相关。引用[2]是关于SystemVerilog的,似乎不太相关。引用[3]是关于PHP数组追加数据的。 用户上一次的问题或我的回答没有提供,但用户说“参考站内引用”,所以我应该基于这些引用回答问题。引用主要集中在PHP上。 关键点: - 在PHP中,关联数组使用 asort() 和 arsort() 进行排序,而不是 sort(),因为 sort() 用于索引数组,会重新索引。 - 引用[1]提到:sort() 用于索引数组升序排序,会重新分配索引。对于关联数组,使用 asort() 和 arsort()。 从引用[1]: - sort():用于索引数组,升序排序,重新分配索引。 - asort():用于关联数组,按键值升序排序,保持键值关联。 - arsort():用于关联数组,按键值降序排序。 - 还有 ksort() 和 krsort() 用于按键名排序。 用户问的是“关联数组使用sort方法排序”,但在PHP中,sort() 不适合关联数组。我应该澄清: - sort() 通常用于索引数组。 - 对于关联数组,使用 asort() 或 arsort()。 用户指定了“sort方法”,但在PHP中,函数名是 asort() 等。我需要解释清楚。 原理: - 排序原理:基于数组元素的值进行排序。关联数组排序时,保持键值对的关系。 - 用法:调用相应的函数,如 asort($array) 来排序关联数组。 - 示例:提供一个简单的PHP代码示例。 回答结构: - 清晰、逐步解释。 - 包括原理、用法、示例。 - 使用中文。 - 最后生成相关问题。 - 添加引用标识。 大纲回答: 1. **引言**:解释关联数组排序的概念。 2. **原理**:简述排序原理,强调保持键值关联。 3. **用法**:列出PHP中相关的函数:asort(), arsort(), ksort(), krsort()。 4. **示例**:给出一个简单的示例代码,演示 asort() 的使用。 5. **注意事项**:提醒 sort() 不适合关联数组,因为它会丢失键。 6. **生成相关问题**:在最后添加相关问题。 引用标识: - 在解释时自然地引用,比如提到函数时引用引用[1]。 数学表达式:用户的问题不涉及数学,但如果有,比如解释算法时可能需要,但这里可能不需要。保持简单。 生成相关问题: - 基于用户的问题,生成2-3个相关问题。 最终回答结构: - 回答主体。 - §§相关问题§§ - 列出问题。 现在,构建回答。 </think>### 关联数组使用 sort 方法排序的原理、用法及示例 在 PHP 中,关联数组是一种键值对结构(例如 `["name" => "Alice", "age" => 30]`)。由于关联数组的键名通常具有语义意义(如 `"name"` 或 `"age"`),直接使用 `sort()` 函数排序不适合,因为它会重新分配数字索引并丢失键值关联。取而代之,PHP 提供了专门用于关联数组的排序函数,如 `asort()`(按键值升序排序)、`arsort()`(按键值降序排序)等[^1]。下面我将一步步解释其原理、用法和提供一个完整示例。 #### 1. **排序原理** - **核心原理**:关联数组排序基于元素的值(value)进行排序,同时保留键名(key)与值的关联。排序算法通常使用高效的比较排序(如快速排序或归并排序),时间复杂度为 $O(n \log n)$,其中 $n$ 是数组元素数量[^1]。 - **关键点**: - `asort()` 和 `arsort()` 函数直接修改原数组(in-place 操作),不返回新数组。 - 排序时,比较数组元素的值:如果是数字,按数值大小排序;如果是字符串,按字典序排序(ASCII 值比较)。 - 保持键值对完整性:排序后,键名仍指向原始值,适用于需要维护数据结构的场景(如数据库结果集排序)[^1][^3]。 - **与 `sort()` 的区别**:`sort()` 函数仅适用于索引数组(数字键数组),它会重置键名为连续的整数索引(例如 `[0 => "a", 1 => "b"]`),这会导致关联数组丢失键名信息[^1]。 #### 2. **用法** 在 PHP 中,关联数组排序主要通过以下函数实现: - `asort(array &$array, int $flags = SORT_REGULAR)`:按键值升序排序。 - `arsort(array &$array, int $flags = SORT_REGULAR)`:按键值降序排序。 - `ksort(array &$array, int $flags = SORT_REGULAR)`:按键名升序排序(如果需要按键名排序)。 - `krsort(array &$array, int $flags = SORT_REGULAR)`:按键名降序排序。 **参数说明**: - `$array`:要排序的关联数组(必须传入引用)。 - `$flags`:可选排序标志,例如: - `SORT_REGULAR`:默认,自动比较类型(数字或字符串)。 - `SORT_NUMERIC`:强制数值比较。 - `SORT_STRING`:强制字典序比较。 - `SORT_LOCALE_STRING`:基于当前区域设置的字符串比较。 **基本步骤**: 1. 定义关联数组。 2. 调用 `asort()` 或 `arsort()` 函数排序。 3. 遍历数组输出结果(排序后键值对顺序改变,但关联保留)。 4. 注意事项:函数直接修改原数组,无需额外赋值[^1][^3]。 #### 3. **完整示例** 以下是一个 PHP 代码示例,演示如何使用 `asort()` 对关联数组按键值升序排序。运行环境:PHP 7+。 ```php <?php // 定义原始关联数组 $user_scores = [ "Alice" => 85, "Bob" => 90, "Charlie" => 78, "Diana" => 95 ]; // 打印排序前数组 echo "排序前数组:\n"; print_r($user_scores); // 使用 asort() 按键值升序排序(修改原数组) asort($user_scores); // 打印排序后数组 echo "\n排序后数组(按键值升序):\n"; print_r($user_scores); // 可选:使用 arsort() 按键值降序排序 // arsort($user_scores); // echo "\n排序后数组(按键值降序):\n"; // print_r($user_scores); ?> ``` **输出结果**: ``` 排序前数组: Array ( [Alice] => 85 [Bob] => 90 [Charlie] => 78 [Diana] => 95 ) 排序后数组(按键值升序): Array ( [Charlie] => 78 [Alice] => 85 [Bob] => 90 [Diana] => 95 ) ``` **解释**: - 示例中,`$user_scores` 是关联数组(键为用户名,值为分数)。 - 调用 `asort()` 后,数组按键值升序排列:Charlie(78) < Alice(85) < Bob(90) < Diana(95)。 - 键名(如 `"Charlie"`)始终与原始值关联,适用于排行榜或数据展示场景[^1][^3]。 #### 4. **注意事项** - **性能**:对于大型数组,排序效率依赖于底层算法(PHP 内部使用优化后的比较排序),但在大数据集下,建议使用数据库排序(如 SQL 的 `ORDER BY`)[^3]。 - **错误处理**:如果数组为空或无效,函数可能返回 `false`(使用前检查数组)。 - **多维数组**:对多维关联数组排序,需结合 `array_multisort()` 或自定义比较函数(如 `usort()`)[^3]。 - 避免错误:不要使用 `sort()` 处理关联数组,否则会丢失键名(例如 `[0 => 78, 1 => 85, ...]`)[^1]。 通过以上内容,您可以轻松掌握关联数组在 PHP 中的排序机制。如有具体场景疑问,可基于示例代码扩展测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明知道的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值