php常用数组函数

本文深入讲解PHP中的数组操作,包括数组的队列操作、自定义处理、多数组操作及其它实用函数,如array_push、array_map、array_walk、array_reduce等,通过实例演示如何运用这些函数实现数组的高效管理和数据处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

手册说明
注:数组操作符 +:+ 运算符把右边的数组元素附加到左边的数组后面,两个数组中都有的键名,则只用左边数组中的,右边的被忽略。

常用函数

1. 可用于队列操作

  • array_push($arr, $value1, ...)将一个或多个单元压入数组的末尾(入栈)
  • array_pop($arr);弹出数组最后一个单元(出栈)
  • array_unshift($arr, $value1, ...);在数组开头插入一个或多个单元
  • array_shift($arr);将数组开头的单元移出数组

2. 数组自定义操作

  • array_map()
    • 语法:array array_map ( callable $callback , array $array1 [, array $... ] )
    • 说明:返回数组,是为 array1 每个元素应用 callback函数之后的数组。 callback 函数形参的数量和传给 array_map() 数组数量,两者必须一样。
    • 详细使用
    • 例:
        <?php
      function cube($n)
      {
          return($n * $n * $n);
      }
      
      $a = array(1, 2, 3, 4, 5);
      $b = array_map("cube", $a);
      print_r($b);
      
      输出:
      Array
      (
          [0] => 1
          [1] => 8
          [2] => 27
          [3] => 64
          [4] => 125
      )
      
  • array_walk()
  • 语法:bool array_walk ( array &$array , callable $callback [, mixed $userdata = NULL ] )
  • 说明:使用用户自定义函数对数组中的每个元素做回调处理,不会受到 array 内部数组指针的影响。array_walk() 会遍历整个数组而不管指针的位置。
  • 具体使用
  • 例:
    $fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
    
    function test_alter(&$item1, $key, $prefix) {
        $item1 = "$prefix: $item1";
    }
    
    function test_print($item2, $key) {
        echo "$key. $item2<br />\n";
    }
    
    echo "Before ...:\n";
    array_walk($fruits, 'test_print');
    
    array_walk($fruits, 'test_alter', 'fruit');
    echo "... and after:\n";
    
    array_walk($fruits, 'test_print');
    
    结果:
    Before ...:
    d. lemon
    a. orange
    b. banana
    c. apple
    ... and after:
    d. fruit: lemon
    a. fruit: orange
    b. fruit: banana
    c. fruit: apple
    
    • 例:
    $origin = [
    	['status' => 'error', 'num' => 5],
    	['status' => 'success', 'num' => 3]
    ];
    $statistics = [];
     array_walk($origin, function ($value) use (&$statistics) {
        return $statistics[$value['status']] = $value['num'];
    });
    //statistics = [
        //'error' => 5,
        //'success' => 3
    //];
    
  • array_reduce()
    • 语法:mixed array_reduce ( array $array , callable $callback [, mixed $initial = NULL ] )
    • 说明:用回调函数迭代地将数组简化为单一的值,
    • 具体使用
    • 参数:
      callback
      mixed callback ( mixed $carry , mixed $item )
      carry
      携带上次迭代里的值; 如果本次迭代是第一次,那么这个值是 initial。
      
      item
      携带了本次迭代的值。
      
      initial
      如果指定了可选参数 initial,该参数将在处理开始前使用,或者当处理结束,数组为空时的最后一个结果。
      
    • 例:
        <?php
      function sum($carry, $item)
      {
          $carry += $item;
          return $carry;
      }
      
      function product($carry, $item)
      {
          $carry *= $item;
          return $carry;
      }
      
      $a = array(1, 2, 3, 4, 5);
      $x = array();
      
      var_dump(array_reduce($a, "sum")); // int(15)
      var_dump(array_reduce($a, "product", 10)); // int(1200), because: 10*1*2*3*4*5
      var_dump(array_reduce($x, "sum", "No data to reduce")); // string(17) "No data to reduce"
      

3. 多数组操作

  • array_merge($array1, $array2, ...)合并一个或多个数组
  • array_diff($array1, $array2, ...) 计算数组的差集; 对比 array1 和其他一个或者多个数字,返回在 array1 中但是不在其他 array 里的值。
  • array_intersect($array1, $array2, ...)计算数组的交集;返回一个数组,该数组包含了所有在 array1 中也同时出现在所有其它参数数组中的值。注意键名保留不变。

4. 其他

  • array_keys 返回数组中部分的或所有的键名
  • array_values 返回数组中所有的值
  • array_unique 移除数组中重复的值
  • array_multisort 对多个数组或多维数组进行排序
  • array_reverse 返回单元顺序相反的数组
  • array_slice 从数组中取出一段
    • 语法:array array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = false ]] )
  • array_search 在数组中搜索给定的值,如果成功则返回首个相应的键名
    • 语法:mixed array_search ( mixed $needle , array $haystack [, bool $strict = false ] )
### PHP 常用数组函数及其用法 #### 合并数组 `array_merge_recursive()` 函数用于合并多维数组。当遇到相同键名时,它不会简单地覆盖值,而是将这些值组合成一个新的数组[^1]。 ```php $fruits1 = array('a' => array('orange', 'banana'), 'b' => 'apple'); $fruits2 = array('a' => array('kiwi', 'pear'), 'c' => 'grape'); $mergedFruits = array_merge_recursive($fruits1, $fruits2); // 输出:['a' => ['orange', 'banana', 'kiwi', 'pear'], 'b' => 'apple', 'c' => 'grape'] print_r($mergedFruits); ``` #### 截取数组 `array_slice()` 和 `array_splice()` 是两种不同的截取方式。前者返回指定范围内的子数组而不改变原数组;后者则修改原数组,并允许插入其他元素[^2]。 ```php $array = range(0, 9); $slicedArray = array_slice($array, 3, 4); // 不改变原始数组 print_r($slicedArray); array_splice($array, 3, 4, ["X", "Y"]); // 修改原始数组 print_r($array); ``` #### 排序数组 PHP 提供多种排序函数,如 `sort()`, `rsort()`, `asort()`, `arsort()`, `ksort()`, `krsort()` 等。每种都有特定用途,比如按值排序或按键排序[^3]。 ```php $data = [5, 3, 8, 6]; sort($data); // 升序排序 print_r($data); rsort($data); // 降序排序 print_r($data); $data_assoc = ['a' => 3, 'b' => 2, 'c' => 1]; asort($data_assoc); // 按值升序排序,保留键关联关系 print_r($data_assoc); ``` #### 查找数组中的值 为了找到某值在数组中最后出现的位置,可以通过自定义逻辑实现这一目标。 ```php $needle = 789; $array = ['hello', '1', 789, 'test', 'another', 789, 'same']; $key = false; foreach ($array as $k => $v) { if ($v === $needle) { // 使用严格比较符确保类型一致 $key = $k; } } var_dump($key); // 返回最后一次匹配的 key ``` #### 将数组分割为更小的部分 `array_chunk()` 能够把一个大数组拆分成若干个小数组,每个小数组包含固定数量的元素。 ```php $input_array = ['a', 'b', 'c', 'd', 'e']; $result = array_chunk($input_array, 2); print_r($result); /* 输出: [ [0] => ['a', 'b'], [1] => ['c', 'd'], [2] => ['e'] ] */ ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值