04-PHP数组常用API详解

1、指针

<?php
namespace _0811;

$stu = ['id'=>1,'name'=>'jack','course'=>'php','score'=>90];

//key():当前键名
//current:当前值
printf('[%s]=>%s',key($stu),current($stu));
echo '<hr>';
//next():指针前移
next($stu);

printf('[%s]=>%s',key($stu),current($stu));
echo '<hr>';

next($stu);

printf('[%s]=>%s',key($stu),current($stu));
echo '<hr>';

next($stu);

printf('[%s]=>%s',key($stu),current($stu));
echo '<hr>';

// next($stu);

//走到头以后返回false
// printf('[%s]=>%s',key($stu),current($stu));
// echo '<hr>';

//prev():指针后移
prev($stu);

printf('[%s]=>%s',key($stu),current($stu));
echo '<hr>';

//reset():指针重置,指向第一个
reset($stu);
printf('[%s]=>%s<hr>',key($stu),current($stu));

//end():指针重置,指向最后一个
end($stu);
printf('[%s]=>%s<hr>',key($stu),current($stu));

//连续输出
reset($stu);
if(count($stu) > 0){
    while(true){
        printf('[%s]=>%s<br>',key($stu),current($stu));
        if(next($stu)){
            continue;
        }else{
            break;
        }
    }
}else{
    echo '空数组';
}
echo '<hr>';

//用foreach进行简化
//key = key($stu),$value = current($stu)
foreach($stu as $key=>$value){
    printf('[%s]=>%s<br>',$key,$value);
}
echo '<hr>';

//用list解构
//索引数组结构
list($name,$price) = ['手机',5000];
echo $name . ',' . $price .  '<hr>';

//关联数组如何解析呢?
//关联数组解构时,需要在list里写入模板.list里的$list和$price可以自定义
list('name'=>$name,'price'=>$price) = ['name'=>'电脑','price'=>8000];

echo $name . ',' . $price .  '<hr>';

//extract与list作用类似
extract(['name'=>'相机','price'=>10000]);
echo $name . ',' . $price .  '<hr>';

//foreach + list
//用二维数组来模拟数据表查询结果
$users = [
    ['id'=>5,'name'=>'Mike'],
    ['id'=>8,'name'=>'John'],
    ['id'=>14,'name'=>'Jerry'],
];
//!注意 foreach(A as B) 时,A不能等于B
foreach($users as $user){
    //$value是一个数组
    // print_r($value);
    vprintf('id= %s,name= %s<br>',$user);
}
/**
 * vprintf和printf都是(模板,数据)的格式
 * 其区别在于:vprintf数据可以是数组,模板可以依次读取,printf不行,必须一个一个写变量
 */
echo '<hr>';
foreach($users as list('id'=>$id,'name'=>$name)){
    //$value是一个数组
    // print_r($value);
    printf('id = %s, name = %s<br>',$id,$name);
}
echo '<hr>';

上述运行结果:

 2、数组API

<?php
namespace _0811;
//与值相关

//array_values():将数组的值,组成一个新数组,键名会重置
$arr = [0=>1,1=>88,2=>88,3=>'php',5=>true,6=>[1,2,3]];
printf('<pre>%s</pre>',print_r($arr,true));
echo '<hr>';
printf('<pre>%s</pre>',print_r(array_values($arr),true));
echo '<hr>';

//in_array():查询某个元素是否在这个数组中,返回true/false

echo (in_array('php',$arr)?'找到了':'没有');

echo '<hr>';

//array_search()
$key = array_search('php',$arr);
echo $key;
echo '<hr>';
echo $key . ',' . $arr[$key];
echo '<hr>';

//array_unique():去重
//加@可以取消报错
@printf('<pre>%s</pre>',print_r(array_unique($arr),true));
echo count($arr) . '<br>';

//array_count_values(),统计出某个值的出现频率,且只能计算 STRING 和 INTEGER 值!
@printf('<pre>%s</pre>',print_r(array_count_values($arr),true));

$arr1 = [0=>1,1=>88,2=>88,3=>'10php',5=>true,6=>88];
//字符串和数组不在求和范围之内.但如果是10php这中字符串,就按10去计算
echo array_sum($arr1) . '<hr>';

//求所有数的成绩时使用array_product
echo array_product($arr1) . '<br>';
//对应1*88*88*10*1*88

上述运行结果:

 

 3、栈操作

<?php
namespace _0811;

//栈操作:成员的增删,只允许在数组的一端进行
//栈操作是增删受限的操作

$arr = [1];

// 尾部添加:array_push(目标数组,要插入的数值),尾部删除:array_pop()
echo array_push($arr,10,20);

echo '<hr>';

//返回插入的数量
print_r($arr);

echo '<hr>';

//array_pop删除尾部的值并返回它
echo array_pop($arr);

echo '<hr>';
//头部添加:array_unshift() 头部删除:array_shift()头部操作

$arr1 = [1];
echo array_unshift($arr1,10,20);
print_r($arr1);
echo '<hr>';
echo array_shift($arr1);

//队列:
//1.尾部追加,头部删除
//array_push(),array_shift()

//2.头部追加,尾部删除
//array_unshift(),array_pop()



上述运行结果:

 4、数组的排序

<?php
namespace _0811;

//数组的排序
$arr = [30,4,82,15,20,'abc','hello',2,46];
printf('<pre>%s</pre>',print_r($arr,true));

//默认排序:升序(键名自动重置)sort()
sort($arr);

printf('<pre>%s</pre>',print_r($arr,true));

//默认排序:升序(键名不重置)
$arr = [39,41,8,5,22,'cde','world',2,46];

asort($arr);
printf('<pre>%s</pre>',print_r($arr,true));

//降序:(键名自动重置)rsort($arr)
rsort($arr);
printf('<pre>%s</pre>',print_r($arr,true));

$arr = [30,4,82,15,20,'abc','hello',2,46];
//降序:(键名不自动重置)arsort($arr)
arsort($arr);
printf('<pre>%s</pre>',print_r($arr,true));

//2.键排序
//ksort($arr):按键升序
ksort($arr);
printf('<pre>%s</pre>',print_r($arr,true));

//krsort($arr):按键降序
krsort($arr);
printf('<pre>%s</pre>',print_r($arr,true));


//自定义排序
$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>';

//打乱数组,每次刷新都不一样
shuffle($arr1);
printf('<pre>%s</pre>',print_r($arr1,true));




/**
 * 1.值排序
 * 默认排序:升序
 * sort($arr)
 * 保持键名
 * asort($arr)
 * 降序
 * rsort($arr)
 * 保持键名
 * arsort($arr)
 */

/**
 * 2.键排序
 * 按键名升序
 * ksort($arr)
 * 按键名降序
 * krsort($arr)
 */

 /**
  * 3.自定义排序
  *usort(数组,自定义函数)
  */

  /**
   * 4.打乱函数
   * shuffle(数组)
   * 打乱数组里的数,每次都不一样
   */

上述运行结果:

 

 

 

 5、查询与替换

<?php
namespace _0811;

//查询与替换
//array_slice() 取出一部分成员
//array_slice(要操作的数组,从哪个下标开始操作,要操作的元素数量---如果没有就从开始下标向后全部存储)
$stu = ['id' => 101,'name' => '张三','age' => 20, 'course' => 'php','grade' => '80'];
$res = array_slice($stu,2,3);

printf('<pre>%s</pre>',print_r($res,true));

echo '<hr>';
$res = array_slice($stu,-4,3);

printf('<pre>%s</pre>',print_r($res,true));
echo '<hr>';
//array_splice():增删改
$arr1 = [10,28,9,33,56,21,82,47];
printf('原始数组元素:<pre>%s</pre>',print_r($arr1,true));
echo '<hr>';
//默认功能:删除
//返回值是被删除的元素
$res1=array_splice($arr1,1,2);
printf('<pre>%s</pre>',print_r($res1,true));
echo '<hr>';

//查看原数组
printf('查看原数组<pre>%s</pre>',print_r($arr1,true));

//替换

$res2 = array_splice($arr1,1,2,[666,999]);

printf('被删除的元素<pre>%s</pre>',print_r($res2,true));

echo '<hr>';
//查看原数组

printf('查看原数组<pre>%s</pre>',print_r($arr1,true));
echo '<hr>';
//增加

$res3 = array_splice($arr1,1,0,[666,999]);

printf('被删除的元素<pre>%s</pre>',print_r($res3,true));
echo '<hr>';

//查看原数组

printf('查看原数组<pre>%s</pre>',print_r($arr1,true));
echo '<hr>';

上述运行结果:

 

 6、数组API

<?php
namespace _0811;

//

$arr = [
    150,
    'php',
    true,
    [4,5,6],
    (new class(){

    }),
    [],
    null,
    false,
    '',
    0,
    '0'
];

//array_filter(),只返回数组中为true的元素组成的数组
$res = array_filter($arr);
printf('<pre>%s</pre>',print_r($res,true));

//空对象不能转为false,但是空数组是false
//php自动转为false的值,null,false,空数组,空字符串,0,'0'

$res = array_filter($arr,function($item){
    //只返回基本数据类型
    return is_scalar($item);
});
printf('<pre>%s</pre>',print_r($res,true));
//再次把空过滤掉(嵌套过滤)
printf('<pre>%s</pre>',print_r(array_filter($res),true));

echo '<hr>';
//array_map()对每个成员,做回调处理,返回新数组

$arr1 = [
    'php',
    [3,4,5],
    (new class(){
        public string $name = '电脑';
        public int $price = 8888;
    }),
    15,
    20
];

//拉平
//get_object_var($object),返回一个数组。获取$object对象中的属性,组成一个数组
$res = array_map(function($item){
    switch(gettype($item)){
        case 'array':
        $item = implode(',',$item);
        break;

        case 'object':
            $item = implode(',',get_object_vars($item));
            break;
    }
    return $item;
},$arr1);
printf('<pre>%s</pre>',print_r(array_filter($res),true));
echo '<hr>';
//array_reduce(要处理的数组,回调函数(累加结果,当前值),初值):迭代/归并处理函数
$arr = [1,2,3,4,5,6];

echo array_sum($arr) . '<hr>';

$res = array_reduce($arr,function($acc,$cur){
    echo $acc . ',' . $cur . '<hr>';
    return $acc + $cur;
},10);
echo $res;
echo '<hr>';
//array_walk():使用自定义函数进行回调处理,返回布尔值

//主要用于数组成员的格式化,不受数组指针影响
$res = ['id' => 10, 'name' => 'admin', 'email' => 'admin@php.cn'];
//array_walk(数组,回调,回调的第三个数组的默认值)

array_walk($res,function($value,$key,$color){
    printf('[%s] => <span style="color:%s">%s</span><br>',$key,$color,$value);
},'green');

上述运行结果:

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

七色的天空

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

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

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

打赏作者

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

抵扣说明:

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

余额充值