71、ksort
对
array
本身进行按键(key)升序排序。
注意:
如果两个成员完全相同,那么它们将保持原来的顺序。 在 PHP 8.0.0 之前,它们在排序数组中的相对顺序是未定义的。
注意:
重置数组中的内部指针,指向第一个元素。
示例1:
<?php
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
ksort($fruits);
foreach ($fruits as $key => $val) {
echo "$key = $val\n";
}
?>
以上例程会输出:
a = orange b = banana c = apple d = lemon
示例2:对使用 int 键的数组进行 ksort()
<?php
$a = [0 => 'First', 2 => 'Last', 1 => 'Middle'];
var_dump($a);
ksort($a);
var_dump($a);
?>
以上例程会输出:
array(3) { [0]=> string(5) "First" [2]=> string(4) "Last" [1]=> string(6) "Middle" } array(3) { [0]=> string(5) "First" [1]=> string(6) "Middle" [2]=> string(4) "Last" }
72、krsort
对
array
本身按照键(key)降序排序。
注意:
如果两个成员完全相同,那么它们将保持原来的顺序。 在 PHP 8.0.0 之前,它们在排序数组中的相对顺序是未定义的。
注意:
重置数组中的内部指针,指向第一个元素。
示例1:
<?php
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
krsort($fruits);
foreach ($fruits as $key => $val) {
echo "$key = $val\n";
}
?>
以上例程会输出:
d = lemon c = apple b = banana a = orange
73、usort
使用用户自定义的比较函数对数组中的值进行排序
示例1:自定义函数返回值小于0时,交换两个数字
<?php
function cmp($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$a = array(3, 2, 5, 6, 1);
usort($a, "cmp");
foreach ($a as $key => $value) {
echo "$key: $value\n";
}
?>
以上例程会输出:
0: 1 1: 2 2: 3 3: 5 4: 6
//自定义排序
$arr1 = [90,33,2,184,24,39];
printf('<pre>%s</pre>',print_r($arr1,true));
echo '<hr>';
usort($arr1,function($a,$b){
//升序 第一次90 33进行比较,小于0就交换
return $a-$b;
});
printf('<pre>%s</pre>',print_r($arr1,true));
echo '<hr>';
usort($arr1,function($a,$b){
//降序
return $b-$a;
});
printf('<pre>%s</pre>',print_r($arr1,true));
echo '<hr>';
示例2:使用多维数组的 usort() 例子
<?php
function cmp($a, $b)
{
return strcmp($a["fruit"], $b["fruit"]);
}
$fruits[0]["fruit"] = "lemons";
$fruits[1]["fruit"] = "apples";
$fruits[2]["fruit"] = "grapes";
usort($fruits, "cmp");
foreach ($fruits as $key => $value) {
echo "\$fruits[$key]: " . $value["fruit"] . "\n";
}
?>
当排序多维数组时,$a 和 $b 包含到数组第一个索引的引用。
以上例程会输出:
$fruits[0]: apples $fruits[1]: grapes $fruits[2]: lemons
示例3:使用一个对象的成员函数的 usort() 例子
<?php
class TestObj {
private string $name;
function __construct($name)
{
$this->name = $name;
}
/* This is the static comparing function: */
static function cmp_obj($a, $b)
{
return strtolower($a->name) <=> strtolower($b->name);
}
}
$a[] = new TestObj("c");
$a[] = new TestObj("b");
$a[] = new TestObj("d");
usort($a, [TestObj::class, "cmp_obj"]);
foreach ($a as $item) {
echo $item->name . "\n";
}
?>
以上例程会输出:
b c d
示例4:
<?php
$array[0] = array('key_a' => 'z', 'key_b' => 'c');
$array[1] = array('key_a' => 'x', 'key_b' => 'b');
$array[2] = array('key_a' => 'y', 'key_b' => 'a');
function build_sorter($key) {
return function ($a, $b) use ($key) {
return strnatcmp($a[$key], $b[$key]);
};
}
usort($array, build_sorter('key_b'));
foreach ($array as $item) {
echo $item['key_a'] . ', ' . $item['key_b'] . "\n";
}
?>
以上例程会输出:
y, a x, b z, c
示例5:使用太空船运算符的 usort() 示例
太空船运算符允许跨多个轴直接比较复合值。 下面的示例将对
$people
按姓氏排序,如果姓氏匹配,则按名字排序。
<?php
$people[0] = ['first' => 'Adam', 'last' => 'West'];
$people[1] = ['first' => 'Alec', 'last' => 'Baldwin'];
$people[2] = ['first' => 'Adam', 'last' => 'Baldwin'];
function sorter(array $a, array $b) {
return [$a['last'], $a['first']] <=> [$b['last'], $b['first']];
}
usort($people, 'sorter');
foreach ($people as $person) {
print $person['last'] . ', ' . $person['first'] . PHP_EOL;
}
?>
以上例程会输出:
Baldwin, Adam Baldwin, Alec West, Adam
74、strcmp
二进制安全字符串比较
返回值:如果
string1
小于string2
返回-1
;如果string1
大于string2
返回1
;如果两者相等,返回0
。
<?php
$var1 = "Hello";
$var2 = "hello";
if (strcmp($var1, $var2) !== 0) {
echo '$var1 is not equal to $var2 in a case sensitive string comparison';
}
?>
75、strtolower
将
string
中所有的 ASCII 字母字符转换为小写并返回。
"A"
(0x41)到"Z"
(0x5a)范围内的字节会通过将每个字节值加 32 转为相应的小写字母。这可用于转换用 UTF-8 编码的字符串中的 ASCII 字符,但会忽略多字节 UTF-8 字符。要转换多字节非 ASCII 字符,请使用 mb_strtolower()。
<?php
$str = "Mary Had A Little Lamb and She LOVED It So";
$str = strtolower($str);
echo $str; // 打印 mary had a little lamb and she loved it so
?>
补充:
- strtoupper() - 将字符串转化为大写
- ucfirst() - 将字符串的首字母转换为大写
- ucwords() - 将字符串中每个单词的首字母转换为大写
76、mb_strtolower
返回所有字母字符转换成小写的
str
。和 strtolower() 不同的是,“字母”字符的检测是根据字符的 Unicode 属性。 因此函数的行为不会受语言设置的影响,能偶转换任意具有“字母”属性的字符,例如元音变音 A(Ä)。
<?php
$str = "Mary Had A Little Lamb and She LOVED It So";
$str = mb_strtolower($str);
echo $str; // 输出: mary had a little lamb and she loved it so
?>
<?php
$str = "Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός";
$str = mb_strtolower($str, 'UTF-8');
echo $str; // 输出 τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός
?>
77、strnatcmp
使用自然排序算法比较字符串
与其他字符串比较函数类似,如果
string1
小于string2
返回-1
; 如果string1
大于string2
返回1
;如果两者相等,返回0
。
<?php
$arr1 = $arr2 = array("img12.png", "img10.png", "img2.png", "img1.png");
echo "Standard string comparison\n";
usort($arr1, "strcmp");
print_r($arr1);
echo "\nNatural order string comparison\n";
usort($arr2, "strnatcmp");
print_r($arr2);
?>
以上例程会输出:
Standard string comparison Array ( [0] => img1.png [1] => img10.png [2] => img12.png [3] => img2.png ) Natural order string comparison Array ( [0] => img1.png [1] => img2.png [2] => img10.png [3] => img12.png )
78、shuffle
本函数打乱(随机排列单元的顺序)一个数组。
<?php
$numbers = range(1, 20);
shuffle($numbers);
foreach ($numbers as $number) {
echo "$number ";
}
?>
79、range
建立一个包含指定范围单元的数组。
range(string|int|float
$start
, string|int|float$end
, int|float$step
= 1): array
start
序列的第一个值。
end
序列结束于
end
的值。
step
如果设置了
step
,会用作元素之间的增量(或减量)。step
不能等于 0 或者超出范围。如果不设置step
则默认为 1。
<?php
// array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
foreach (range(0, 12) as $number) {
echo $number;
}
echo "\n";
// step 参数
// array(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
foreach (range(0, 100, 10) as $number) {
echo $number;
}
echo "\n";
// 字符序列的使用
// array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i');
foreach (range('a', 'i') as $letter) {
echo $letter;
}
echo "\n";
// array('c', 'b', 'a');
foreach (range('c', 'a') as $letter) {
echo $letter;
}
?>
80、array_slice
返回根据
offset
和length
参数所指定的array
数组中的一段序列。
array
输入的数组。
offset
如果
offset
非负,则序列将从array
中的此偏移量开始。如果
offset
为负,则序列将从array
中距离末端这么远的地方开始。
注意:
参数
offset
标识的是数组中的位置,而不是键。
length
如果给出了
length
并且为正,则序列中将具有这么多的单元。如果 array 比
length
要短,只会保留有效的数组单元。如果给出了
length
并且为负,则序列将终止在距离数组末端这么远的地方。如果省略,则序列将从
offset
开始一直到array
的末端。
preserve_keys
注意:
注意 array_slice() 默认会重新排序并重置数组的数字索引。你可以通过将
preserve_keys
设为true
来改变此行为。 无论本参数如何设置,都会保留字符串的键。
返回值:
返回其中一段。 如果 offset 参数大于 array 尺寸,就会返回空的 array。
示例1:
<?php
$input = array("a", "b", "c", "d", "e");
$output = array_slice($input, 2); // 返回 "c", "d" 和 "e"
$output = array_slice($input, -2, 1); // 返回 "d"
$output = array_slice($input, 0, 3); // 返回 "a", "b" 和 "c"
// 注意数组中 key 的不同
print_r(array_slice($input, 2, -1));
print_r(array_slice($input, 2, -1, true));
?>
以上例程会输出:
Array ( [0] => c [1] => d ) Array ( [2] => c [3] => d )
示例2:array_slice() 于索引从 1 开始的 array
<?php
$input = array(1 => "a", "b", "c", "d", "e");
print_r(array_slice($input, 1, 2));
?>
以上例程会输出:
Array ( [0] => b [1] => c )
示例3:array_slice() 与混合类型键的 array
<?php
$ar = array('a'=>'apple', 'b'=>'banana', '42'=>'pear', 'd'=>'orange');
print_r(array_slice($ar, 0, 3));
print_r(array_slice($ar, 0, 3, true));
?>
以上例程会输出:
Array ( [a] => apple [b] => banana [0] => pear ) Array ( [a] => apple [b] => banana [42] => pear )