PHP 如何将数字转换成逗号分隔的形式?

PHP
答案 用内置number_format()方法即可实现。 echo number_format($number); 自己实现(不支持小数点): function number2thousands($number) { $number = (string)strrev($number); // 反转字符串 $number = chunk_split($number, 3, ','); // 以逗号,将字符串分隔成小段,每小段长度…

双向队列 PHP 版

PHP ,
答案 /** * 双向队列PHP版 */ class DoubleEndedQueue { private $queue = []; public function addHead($item) { return array_unshift($this->queue, $item); } public function addTail($item) { return array_push($this->queue, $item); } public function removeHead() { return …

PHP 如何根据指定键的值排序二维数组?

PHP ,
答案 使用PHP内置usort函数实现,这里实现正向的自然排序,其他排序方式略作修改即可。 function sort2DArray($arr, $column) { usort($arr, function($a, $b) use ($column) { return strnatcmp($a[$column], $b[$column]); }); return $arr; } 解析 测试代码: $arr = array( array('id…

PHP 实现多维数组值变成首字母大写

PHP ,
答案 使用内置函数array_walk_recursive()实现,注意,匿名函数参数$value我们使用引用传参方式,就地修改元素值。 function upperArrayFirstWord($arr) { array_walk_recursive($arr, function(&$value, $key) { $value = ucfirst($value); }); return $arr; }

如何高效地根据 IP 获得城市?

PHP ,
答案 可以用 Redis 的有序集合(Sorted Set)实现,将 IP 保存为整形作为集合的score,再根据 score 范围查找。 /** * 时间复杂度: O(log(N)+M),N为有序集的基数,M为被结果集的基数。 */ class Ip { private $redis = null; private $key = 'ip'; public function __construct() { $t…

PHP 设计一个秒杀系统?

PHP ,
答案 <?php $redis = new Redis(); $ttl = 4; $random = mt_rand(1, 1000) . '-' . gettimeofday(true) . '-' . mt_rand(1, 1000); $lock = false; // 循环获取锁,成功则继续往下,不成功则继续循环 while (!$lock) { $lock = $redis->set('lock', $random, a…