08-PHP使用过的函数 71-80

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
)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

七色的天空

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

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

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

打赏作者

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

抵扣说明:

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

余额充值