找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 55|回复: 4

PHP笔记本

[复制链接]
匿名
匿名  发表于 2025-2-28 17:13:01 |阅读模式
在PHP开发中,哪怕是最基础的知识点,在开发过程中也可能会突然记不起来。

所谓好记性不如烂笔头,这篇帖子主要用于记录一些PHP知识点。如:常用函数、函数使用方法、开发技巧等。

每一个知识点将放在一个楼层中(本帖不允许回复)


匿名
匿名  发表于 2025-2-28 17:20:29

PHP获取数组长度

一、常用方法‌

‌count() 函数‌
直接返回数组元素个数,适用于所有PHP版本。
  1. $arr = [1, 2, 3];
  2. $length = count($arr);  // 输出:3
复制代码

支持多维数组统计
(需设置第二个参数为 COUNT_RECURSIVE):
  1. $multiArr = [[1, 2], [3, 4]];
  2. $total = count($multiArr, COUNT_RECURSIVE);  // 输出:6(包含所有子元素)
复制代码

‌sizeof() 函数‌
与 count() 完全等价,用法一致:
  1. $arr = ["a", "b", "c"];
  2. $length = sizeof($arr);  // 输出:3
复制代码

‌二、其他方法‌


‌ArrayIterator 迭代器‌
适用于PHP 5+,通过迭代器统计元素数:
  1. $arr = ["x", "y", "z"];
  2. $iterator = new ArrayIterator($arr);
  3. $length = $iterator->count();  // 输出:3
复制代码

array_key_last()(PHP 7.3+)‌
适用于索引数组,通过最后一个键名计算长度:
  1. $arr = [0 => 'a', 1 => 'b', 2 => 'c'];
  2. $lastKey = array_key_last($arr);
  3. $length = $lastKey + 1;  // 输出:3
复制代码
注意:仅当数组键名连续且从0开始时有效


三、多维数组处理‌

默认模式‌(不递归统计子数组):
  1. $multiArr = [[1, 2], [3, 4]];
  2. $length = count($multiArr);  // 输出:2(仅统计第一层)
复制代码

递归模式‌(统计所有层级元素):
  1. $length = count($multiArr, COUNT_RECURSIVE);  // 输出:6
复制代码

总结‌
‌推荐使用 count()‌:兼容性好、效率高,且支持多维数组统计。
‌避免手动循环‌:性能较低,仅适用于特殊场景(如过滤某些元素后统计)。
‌注意键名连续性‌:array_key_last() 方法需确保数组键名连续且从0开始。








3

主题

4

回帖

65

积分

管理员

积分
65
发表于 2025-3-1 22:19:55 | 显示全部楼层

PHP数组,序列化与反序列化

serialize() 用于将值转换为可存储或传输的字符串格式,而 unserialize() 则可以将这个字符串再转换回原来的PHP值。

  1. <?php

  2. // 假设这是你的原始数组
  3. $originalArray = [
  4.     'permission_group' => 'a:1:{i:0;s:2:"10";}'
  5. ];

  6. // 使用 unserialize() 函数来解析 'permission_group' 的值
  7. $unserializedPermissionGroup = unserialize($originalArray['permission_group']);

  8. // 现在 $unserializedPermissionGroup 是一个 PHP 数组
  9. print_r($unserializedPermissionGroup);

  10. // 如果你需要进一步处理,例如遍历这个数组
  11. foreach ($unserializedPermissionGroup as $index => $value) {
  12.     echo "Index $index has value $value\n";
  13. }

  14. ?>
复制代码
当运行上述代码时,它会输出:

  1. Array
  2. (
  3.     [0] => 10
  4. )
  5. Index 0 has value 10
复制代码

请注意,如果从不受信任的来源获取序列化数据,并尝试使用 unserialize() 来解析它,可能会存在安全风险。攻击者可能构造恶意的序列化字符串,导致执行任意代码。因此,在处理来自外部的序列化数据时,务必确保其来源是可信的,或者考虑使用更安全的数据交换格式如 JSON (json_encode() 和 json_decode())。
如果你确定数据是安全的,并且想要检查是否成功反序列化,可以添加错误处理:
  1. <?php

  2. $originalArray = [
  3.     'permission_group' => 'a:1:{i:0;s:2:"10";}'
  4. ];

  5. if (is_string($originalArray['permission_group']) && ($unserializedPermissionGroup = @unserialize($originalArray['permission_group'])) !== false) {
  6.     // 成功反序列化
  7.     print_r($unserializedPermissionGroup);
  8. } else {
  9.     // 反序列化失败,可能是数据损坏或不是有效的序列化字符串
  10.     echo "Failed to unserialize data.";
  11. }

  12. ?>
复制代码
这段代码使用了错误抑制符 @ 来防止 unserialize() 在遇到无效输入时产生警告,并通过检查返回值是否为 false 来判断反序列化是否成功。

3

主题

4

回帖

65

积分

管理员

积分
65
发表于 2025-3-10 10:38:32 | 显示全部楼层

PHP将字符串转换成数组

在 PHP 中,将字符串转换成数组有多种方法,具体取决于字符串的格式和你的需求。以下是一些常见的方法:

1. 使用 explode()
如果你的字符串是由某种分隔符分隔的,比如逗号、空格等,你可以使用 explode() 函数。
  1. $string = "apple,banana,orange";
  2. $array = explode(",", $string);
  3. print_r($array);
复制代码

2. 使用 str_split()
如果你想要将字符串分割成单个字符的数组,可以使用 str_split() 函数。
  1. $string = "hello";
  2. $array = str_split($string);
  3. print_r($array);
复制代码
输出:
  1. Array ( [0] => h [1] => e [2] => l [3] => l [4] => o )
复制代码

3. 使用 preg_split()
对于更复杂的分割需求,可以使用 preg_split(),它允许你使用正则表达式来分割字符串。
  1. $string = "apple-banana-orange";
  2. $array = preg_split('/[-]+/', $string);
  3. print_r($array);
复制代码

输出:
  1. Array ( [0] => apple [1] => banana [2] => orange )
复制代码


4. 使用 str_getcsv()
如果你在处理 CSV(逗号分隔值)格式的字符串,可以使用 str_getcsv() 函数,它专门用于处理 CSV 数据。

  1. $string = "name,age,city\nJohn,30,New York\nDoe,25,Los Angeles";
  2. $array = str_getcsv($string); // 对于单行CSV数据使用此方法,对于多行需要循环调用或使用 file() 函数读取文件行。
  3. print_r($array); // 对于单行数据,这将输出整个行作为数组。
复制代码
输出:
  1. Array ( [0] => name [1] => age [2] => city John [3] => 30 [4] => New York Doe [5] => 25 [6] => Los Angeles )
复制代码


5.使用 json_decode()(适用于 JSON 字符串)
如果你有一个 JSON 格式的字符串,可以使用 json_decode() 来转换成数组。

  1. $jsonString = '{"name":"John", "age":30, "city":"New York"}';
  2. $array = json_decode($jsonString, true); // 第二个参数设置为 true 将输出数组而不是对象。
  3. print_r($array);
复制代码
输出:
  1. Array ( [name] => John [age] => 30 [city] => New York )
复制代码

3

主题

4

回帖

65

积分

管理员

积分
65
发表于 2025-3-12 22:56:13 | 显示全部楼层

php 如何获取时间戳

在PHP中,获取时间戳(即从1970年1月1日00:00:00 GMT至当前时间的秒数)可以使用time()函数。这个函数不需要任何参数,直接调用即可返回当前的UNIX时间戳。
  1. <?php
  2. // 获取当前时间的时间戳
  3. $timestamp = time();
  4. echo $timestamp;
  5. ?>
复制代码



高级用法

获取特定日期的时间戳
如果你想要获取特定日期的时间戳,可以使用strtotime()函数。strtotime()函数可以将任何英文文本的日期时间描述解析为UNIX时间戳。
  1. <?php
  2. // 获取特定日期的时间戳
  3. $dateString = "2023-04-01 12:00:00";
  4. $timestamp = strtotime($dateString);
  5. echo $timestamp;
  6. ?>
复制代码


获取未来的时间戳

如果你想要获取未来某个时间点的时间戳,同样可以使用strtotime(),并通过相对时间表达式来指定。
  1. <?php
  2. // 获取从现在起24小时后的时间戳
  3. $futureTimestamp = strtotime("+24 hours");
  4. echo $futureTimestamp;
  5. ?>
复制代码


注意事项

time()函数返回的时间戳是基于格林威治标准时间(GMT)的。如果你的服务器位于不同的时区,你可以使用date_default_timezone_set()函数来设置你的时区,这样time()返回的时间戳就会反映该时区的时间。
  1. <?php
  2. // 设置时区为上海(GMT+8)
  3. date_default_timezone_set('Asia/Shanghai');
  4. $timestamp = time(); // 现在的时间戳将反映上海的时区
  5. echo $timestamp;
  6. ?>
复制代码
使用strtotime()时,确保你输入的日期字符串格式正确,否则可能会返回false。例如,strtotime("tomorrow")将会返回明天00:00:00的时间戳。通过这些方法,你可以灵活地在PHP中获取时间戳,无论是当前时间还是特定日期的时间戳。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DE8G.CN

GMT+8, 2025-4-11 05:11 , Processed in 0.070219 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表