q456123 发表于 2018-12-13 07:27:27

PHP 数组

PHP 中数组有两种模式:索引数组和关联数组。索引数组使用数字作为键,
而关联数组则使用字符串作为键。 打印数组 print_r() var_dump() var_export();


  使用 list 函数将元素值返回至变量
  //使用 list 函数
  list($name, $age, $gender) = array('张三', 33, '男');
  //输出元素值的变量
  echo $name.'的性别是:'.$gender.',今年'.$age.'岁';
  //只获取姓名和性别
  list($name,,$gender)=   array('张三', 33, '男')
  

  元素值的增减
  1.第一种增加数组元素值的方法:数组名+[] = 元素值,即可在数组尾部增加一个元
  素值。
  //原数组
  $phone = array('苹果', '华为', '三星', '小米', '魅族', '锤子');
  //在数组尾部添加一个元素值
  $phone[] = 'OPPO'; //或$phone['R9'] = 'OPPO'实现关联数组元素增加
  2.使用 array_unshift 函数从数组头部增加元素值
  //在头部添加元素值,数值索引将重新计算,字符串索引保持不变
  array_unshift($phone, 'OPPO', '金立');
  3.使用 array_push 函数从数组尾部增加元数值
  //在尾部添加元素值,类似$phone[] = 'OPPO'
  array_push($phone, 'OPPO', '金立');
  4.使用 array_shift 函数从数组头开始删除
  //从数组开头删除一个元素值,数值索引重新计算,字符串索引不变
  array_shift($phone);
  5.使用 array_pop 函数从数组结尾开始删除
  //从数组结尾删除一个元素值
  array_pop($phone);
  6.使用 array_splice 函数删除或插入元素值
  //从位置 2(第三个元素开始),删除 3 个
  array_splice($phone, 2, 3);
  //从位置 2(第三个元素开始),删除至末尾
  array_splice($phone, 2);
  

  元素值的遍历
  大多数情况下,我们需要将数组里所有的数据遍历出来,再按照指定的格式:比如二维
  表格的形式展现出来。此时,我们需要一些带有循环能力的语句。
  1.foreach 遍历
  //最推荐常用的遍历方式
  foreach ($phone as $key=>$value) {
  echo $key.'|'.$value.'';
  }
  2.for 循环
  //这种只能遍历数值索引数组,字符串索引没有 key
  for ($i = 0; $i < 6; $i++) {
  echo $phone[$i].'';
  }
  

  数组判断操作
  1.使用 in_array 函数可以判断一个元素是否在这个数组中。
  //数组
  $phone = array('苹果', '华为', '三星', '小米', '魅族', '锤子');
  //判断元素值为三星是否在数组中
  echo in_array('三星', $phone);
  2.使用 array_key_exists 函数可以判断键值或索引是否存在这个数组中。
  //数组
  $computer = array('联想'=>'X808', '华硕'=>'Y560', '微星'=>'Z890');
  //判断键值为联想的元素是否在数组中
  echo array_key_exists('联想', $computer);
  3.使用 array_search 函数可以搜索元素值的索引值。
  //数组
  $phone = array('苹果', '华为', '三星', '小米', '魅族', '锤子');
  //返回搜索的键
  echo array_search('三星', $phone);
  

  数组转换操作
  1.使用 array_keys 函数可以返回数组中的索引,并组成一个新数组。
  //数组
  $computer = array('联想'=>'X808', '华硕'=>'Y560', '微星'=>'Z890');
  //提取索引并当作元素组成新数组
  $keys = array_keys($computer);
  //输出
  var_export($keys);
  2.使用 array_values 函数返回所有元素值并重新生成一个数值索引数组。
  //数组
  $computer = array('联想'=>'X808', '华硕'=>'Y560', '微星'=>'Z890');
  //提取元素值并创建新数组
  $values = array_values($computer);
  //输出
  var_export($values);
  

  数组拆合操作

  1.使用 array_chunk 函数分组数组。
  //数组
  $phone = array('苹果', '华为', '三星', '小米', '魅族', '锤子');
  //每两个分一组,组成多维数组
  $chunk = array_chunk($phone, 2);
  //打印测试
  print_r($chunk);
  2.使用 array_merge 函数组合数组。
  //数组
  $phone = array('苹果', '华为', '三星', '小米', '魅族', '锤子');
  //数组 2
  $computer = array('联想'=>'X808', '华硕'=>'Y560', '微星'=>'Z890');
  //整合两个数组
  $array = array_merge($phone, $computer);
  //打印输出
  print_r($array);
  3.使用 array_combine 函数合并数组。
  //数组 1
  $computer = array('联想'=>'X808', '华硕'=>'Y560', '微星'=>'Z890');
  //数组 2
  $phone = array('苹果', '华为', '三星');
  //取数组 1 的值作为键,取数组 2 的值作为元素值,然后合并
  $array = array_combine($computer, $phone);
  //打印输出
  print_r($array);
  4.使用 array_intersect 函数返回数组中的交集。
  //数组 1
  $color1 = array('a'=>'green', 'red', 'blue');
  //数组 2
  $color2 = array('b'=>'green', 'yellow', 'red');
  //返回交集并创建新数组
  $array = array_intersect($color1, $color2);
  //打印输出
  print_r($array);
  5.使用 array_diff 函数返回数组的差集。
  //数组 1
  $color1 = array('a'=>'green', 'red', 'blue');
  //数组 2
  $color2 = array('b'=>'green', 'yellow', 'red');
  //返回差集,并建立新数组
  $array = array_diff($color1, $color2);
  //打印
  print_r($array);
  

  数组计算操作
  1.使用 count/sizeof 函数可以返回数组的元素个数。
  //数组
  $phone = array('苹果', '华为', '三星', '小米', '魅族', '锤子');
  //得到数组的元素个数
  echo count($phone);
  //多维数组
  $price = array(
  array('小米 8', 100, 2999),
  array('iphone9 plus', 50, 7999),
  array('锤子 x', 10, 3999)
  );
  //递归统计
  echo count($price, 1);
  2.使用 array_pad 函数填充数组。
  //数组
  $phone = array('苹果', '华为', '三星', '小米', '魅族', '锤子');
  //向右填充两位,数组本身 6 位
  $array = array_pad($phone, 8, '占位');
  //打印查看
  print_r($array);
  //负数,可以在左边填充
  $array = array_pad($phone, -8, '占位');
  3.使用 array_fill 函数给定的值填充数组。
  //创建索引从 3 开始,4 个值为 banana 的数组
  $array = array_fill(3, 4, 'banana');
  //输出
  var_export($array);
  4.使用 array_sum 函数求出数组所有值的和。
  //数值数组
  $num = array(1, 2, 3, 4, 5, 6);
  //求和
  echo array_sum($num);
  5.使用 array_product 函数返回数组所有数值的乘积。
  //数组
  $num = array(1, 2, 3, 4, 5, 6);
  //求乘积
  echo array_product($num);
  6.使用 array_unique 函数移出数组中重复的值。
  //数组
  $phone = array('苹果', '华为', '三星', '小米', '魅族', '锤子', '苹果');
  //移除重复的值
  $array = array_unique($phone);
  //输出
  var_export($array);
  7.使用 array_flip 函数将键和值对调。
  //数组
  $computer = array('联想'=>'X808', '华硕'=>'Y560', '微星'=>'Z890');
  //交换键和值
  $array = array_flip($computer);
  //输出
  var_export($array);
  8.使用 array_rand 函数从数组中随机取出一个或多个元素值。
  //数组
  $phone = array('苹果', '华为', '三星', '小米', '魅族', '锤子');
  //随机返回索引
  $keys = array_rand($phone);
  //输出
  var_export($keys);
  //随机取出两个
  $keys = array_rand($phone, 2);
  9.使用 array_count_values 函数统计所有的值出现的次数。
  //数组
  $phone = array('苹果', '华为', '三星', '三星', '魅族', '魅族');
  //统计
  $count = array_count_values($phone);
  //输出
  var_export($count);
  10.使用 array_column 函数返回数组中指定的一列。
  //多维数组
  $grade = array(
  array(
  '数学'=>95,
  '语文'=>92,
  '英语'=>97
  ),
  array(
  '数学'=>99,
  '语文'=>95,
  '英语'=>92
  ),
  array(
  '数学'=>92,
  '语文'=>95,
  '英语'=>93
  ),
  );
  //返回语文一列
  $chinese = array_column($grade, '语文');
  //输出
  var_export($chinese);
  

  

  数组迭代操作
  1.使用 each 函数获取当前数组指针定位的键值对,并让指针向下一个位置移动一步。
  //数组
  $phone = array('苹果', '华为', '三星', '小米', '魅族', '锤子');
  //获取第一个位置的键值对,并将指针下移
  list($key, $value) = each($phone);
  //打印第一个位置的键值对
  echo $key.'-'.$value;
  //获取第二个位置的键值对,并将指针下移
  list($key, $value) = each($phone);
  //打印第二个位置的键值对
  echo $key.'-'.$value;
  2.使用 current 函数返回当前数组指针指向的元素值。
  //数组
  $phone = array('苹果', '华为', '三星', '小米', '魅族', '锤子');
  //获取当前指针的元素值
  $one = current($phone);
  //获取当前指针的元素值,注:并不会下移指针
  $two = current($phone);
  //输出
  echo $one;
  //输出
  echo $two;
  3.使用 next 函数将数组指针移动至下一位。
  //获取一位元素值
  $one = current($phone);
  //指针下移一位
  next($phone);
  //获取下一位元素值
  $two = current($phone);
  next
  4.使用 prev 函数将指针移动至上一位。
  //往上一位移动
  prev($phone);
  5.使用 reset 函数将指针移至第一位。
  //移至第一位
  reset($phone)
  6.使用 end 函数将指针移至末尾。
  //移至末尾
  end($phone);
  7.使用 key 函数返回当前指针元素的键。
  //移至末尾
  key($phone)
  

  数组排序操作
  1.使用 sort 函数对数组进行从低到高排序。(按值排序,并重新分配索引)
  //数组
  $array = array('green', 'red', 'orange', 'blue');
  //对源数组进行排序
  sort($array);
  //打印
  print_r($array);
  $sort_flags 值较多,我们一一解释一下:
  (1).SORT_REGULAR - 正常比较单元(不改变类型,默认值)
  1.如果是字符串,会按照首字母从低到高顺序排列;
  2.如果是数值,会按照数字从小到大排列,如果其中是数值字符串,不影响;
  3.如果是中文字符,在 GBK 的情况下,会按照中文字符的拼音排序,如果是
  UTF8,则需要进行一些转换,这里暂时不深入探讨。
  (2).SORT_STRING - 单元被作为字符串来比较
  //数组
  $array = array(2, 12);
  //按字符串模式排序
  sort($array, SORT_STRING);
  //输出
  print_r($array);
  (3).SORT_NUMERIC - 单元被作为数字来比较
  //数组
  $array = array('2', '12');
  //按数字排序
  sort($array, SORT_NUMERIC);
  //输出
  print_r($array);
  (4).SORT_NATURAL 自然排序,SORT_FLAG_CASE 和自然排序合并,实现不区分
  大小写排序。
  //数组
  $array = array('Apple1', 'apple2', 'Apple3', 'apple4');
  //不区分大小写
  sort($array, SORT_NATURAL | SORT_FLAG_CASE);
  //输出
  print_r($array);
  2.使用 rsort 函数对数组进行从高到低排序。(按值排序,并重新分配索引)
  //数组
  $array = array('green', 'red', 'orange', 'blue');
  //对源数组进行排序
  sort($array);
  //打印
  print_r($array);
  3.使用 usort 实现自定义排序。(按值排序,并重新分配索引)
  //数组
  $array = array(7, 3, 5, 9, 1, 4, 2);
  //自定义排序
  usort($array, function ($a, $b) {
  if ($a == $b) {
  return 0;
  }
  return ($a < $b) ? -1 : 1;
  });
  //输出
  print_r($array);
  4.asort、arsort、uasort 函数对应上面三个函数的功能,只不过不会重新分配索引。
  //数组
  $array = array('green', 'red', 'orange', 'blue');
  //从低到高排序,但不改变索引
  asort($array);
  //输出
  print_r($array);
  5.ksort、krsort、kasort 函数对应上面三个函数的功能,只不过对键进行排序。
  //数组
  $array = array('x'=>'green', 'j'=>'red', 'b'=>'orange', 'h'=>'blue');
  //对键进行从低到高排序
  ksort($array);
  //输出
  print_r($array);
  6.使用 shuffle 函数对数组进行随机排序。
  //数组
  $array = array('green', 'red', 'orange', 'blue');
  //实现随机排序
  shuffle($array);
  //输出
  print_r($array);
  7.使用natsort实现自然排序,使用natcasesort函数实现不区分大小写的自然排序。
  //数组
  $array = array('demo8.php', 'demo1.php', 'demo10.php', 'demo5.php');
  //自然排序
  natsort($array);
  //输出
  print_r($array);
  8.使用 array_reverse 函数实现翻转数组并重新生成。
  //数组
  $array = array('green', 'red', 'orange', 'blue');
  //翻转数组并返回翻转的数组
  $reverse = array_reverse($array);
  //输出
  var_export($reverse);
  

  数组函数补齐
  1.使用 compact 函数将变量和值整合成数组。
  //变量和值
  $name = 'Mr.Lee';
  $age = 33;
  $job = 'teacher';
  //整合成数组
  $result = compact('name', 'age', 'job');
  //输出
  var_export($result)
  2.使用 extract 函数将数组的键值解析变量和值。
  //数组
  $info = array('name'=>'Mr.Lee', 'age'=>33, 'job'=>'teacher');
  //解析成变量
  extract($info);
  //输出变量
  echo $name.$age.$job;
  3.使用 array_change_key_case 返回字符串键名为小写或大写的数组。
  //数组
  $color = array('Red'=>'apple', 'Orange'=>'banana');
  //转换键名为默认小写并返回新数组
  $array = array_change_key_case($color);
  //输出
  var_export($array);
  4.使用 array_filter 函数过滤元素值。
  //数组
  $color = array('red', 'blue', 'orange', 'green', 'yellow');
  //回调函数进行判断过滤
  $array = array_filter($color, function ($value) {
  if ($value != 'green') {
  return $value;
  }
  });
  //输出
  var_export($array);
  5.使用 array_map 函数处理元素值。
  //数组
  $num = array(1, 2, 3, 4, 5);
  //对元素值进行逐个处理
  $array = array_map(function ($n) {
  return $n * $n * $n;
  }, $num);
  //输出
  print_r($array);
  //多个数组
  $num = array(1, 2, 3, 4, 5);
  $enlish = array('one', 'two', 'three', 'four', 'five');
  //回调函数为 null,可以合并两个数组
  $array = array_map(null, $num, $enlish);
  //输出
  print_r($array);
  6.使用 array_reduce 函数迭代的处理元素值简化为单一值。
  //数组
  $num = array(1, 2, 3, 4, 5);
  //迭代处理
  $total = array_reduce($num, function ($v, $w) {
  $v += $w;
  return $v;
  });
  //输出
  echo $total;
  7.使用 array_replace 函数替换数组元素。
  //数组
  $color = array('red', 'blue', 'orange', 'green');
  //替换的数组
  $replacements = array(0=>'yellow');
  //执行替换并生成新数组
  $array = array_replace($color, $replacements);
  //输出
  var_export($array);
  8.使用 array_walk 函数可以通过回调函数自定义数组中每个元素值。
  //数组
  $color = array('red', 'blue', 'orange', 'green');
  //更改数组中的元素值
  array_walk($color, function (&$value) {
  if ($value == 'orange') {
  $value = 'yellow';
  }
  });
  //数组
  print_r($color)
  




页: [1]
查看完整版本: PHP 数组