PHP数组深入

1、数组创建

索引数组:数组下标是数字

//自动分配:
$cars=array("Volvo","BMW","SAAB"); 
//手动分配1:
$cars[0]="Volvo";
$cars[1]="BMW";
$cars[2]="SAAB";
//手动分配2(与1等价):
$cars[]="Volvo";
$cars[]="BMW";
$cars[]="SAAB";

关联数组:数组下标是字符串

//自动分配:
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
//手动分配:
$age['Peter']="35";
$age['Ben']="37";
$age['Joe']="43";
echo "Peter is " . $age['Peter'] . " years old.";

多维数组
多维数组是数组的嵌套,即数组中又包含数组
二维数组例子;

<?php
$cars = array
(
array("Volvo",22,18),
array("BMW",15,13),
array("Saab",5,2),
array("Land Rover",17,15)
);
echo $cars[0][0].": 库存:".$cars[0][1].", 销量:".$cars[0][2].".<br>";
echo $cars[1][0].": 库存:".$cars[1][1].", 销量:".$cars[1][2].".<br>";
echo $cars[2][0].": 库存:".$cars[2][1].", 销量:".$cars[2][2].".<br>";
echo $cars[3][0].": 库存:".$cars[3][1].", 销量:".$cars[3][2].".<br>";
?>


可以在 for 循环中使用另一个 for 循环,来获得 $cars 数组中的元素(仍需使用两个索引):

2、数组遍历

for()循环(略)
foreach循环
语法:

foreach ($array as $value) {
    code to be executed;
}

例子:
索引数组:

$colors = array("red","green","blue","yellow"); 
foreach ($colors as $value) {
    echo "$value <br>";
}


关联数组:

$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");
foreach($age as $x=>$x_value) {
    echo "Key=" . $x . ", Value=" . $x_value;
    echo "<br>";
}

list,each,while遍历(list看不到字符串下标的值)
list的作用:list — 把数组中的值赋给一组变量
list() 仅能用于数字索引的数组,并假定数字索引从 0 开始
each — 返回数组中当前的键/值对并将数组指针向前移动一步
返回 array 数组中当前指针位置的键/值对并向前移动数组指针。键值对被返回为四个单元的数组,键名为0,1,key和 value。单元 0 和 key 包含有数组单元的键名,1 和 value 包含有数据。(看手册)

$fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
reset($fruit);
while (list($key, $val) = each($fruit)) {
    echo "$key => $val\n";
}


使用数组的内部指针控制函数遍历数组
key()获取当前数组指针所在键值,

current()获取当前数组指针所在元素值,

next()获取当前数组指针下一个元素值并将指针下移一位,

prev()获取当前数组指针上一个元素值并将指针上移一位,

end()获取当前数组最后一个元素值并将指针移到最后,

reset()获取当前数组第一个一个元素值并将指针移到第一位

3、获得数组的长度:count($arr)

4、数组排序

sort($arr) - 按值把数组值进行排序,升序,不保留key
rsort($arr) - 按值把数组值进行排序,降序,不保留key
asort($arr) - 按值把数组值进行排序,升序,保留key
arsort($arr) - 按值把数组值进行排序,降序,保留key
ksort($arr) - 按键把数组值进行排序,升序,保留key
krsort($arr) - 按键把数组值进行排序,降序,保留key
natsort();-自然排序,用于有字符串数组
natcasesort();-忽略大小写的自然排序,用于有字符串数组
array_multisort();-用一个数组对另外一个数组进行排序

5、array_map();将回调函数作用到给定数组的单元上

6、键值操作

获取数组中的值
array_values();返回含所有值的索引数组
获取数组中的键
array_keys();返回数组中部分的或所有的键名
array array_keys ( array $array [, mixed $search_value = null [, bool $strict = false ]] )
检查一个值是否在数组中
in_array();
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
检查一个键是否在数组中
array_key_exists();
键和值对调
array_flip();
数组中的值反转
array_reverse();
删除数组中重复值
array_unique();
统计数组中值出现的次数
array_count_values();(限于元素为字符串或整型的数组)
自己实现

function acv($arr){
    foreach($arr as $val){
        if(!isset($arr2[$val]))
            $arr2[$val]=0;
        $arr2[$val]++;
    }
    return $arr2;
}        

数组值过滤
array_filter();
自己实现(还没有实现回调函数):

function af($arr){
     foreach($arr as $k=>$v)
        if(empty($v))
            unset($arr[$k]);
    return $arr;
}

7、拆分、合并、分解与结合函数

array_slice($arr,$index,$length);返回截取的一段值,原数组不变
array_splice($arr,$index,$length);返回截取的一段值,改变原数组
array_combine($arr1,$arr2);合并,前一个是key,后一个是value
array_merge(); 并集;合并,键值相同,后面覆盖前面
implode();/join() 把数组连接成字符串
$str=implode($arr,'-');
explode();把字符串分解成数组
$str='2016-06-27';
$arr=explode('-',$str);

8、插入删除函数

array_pop();从最后弹出一个值,返回弹出值
array_push();从最后压入一个值,返回数组个数
array_shift();从前面弹出一个值,返回移出值,原数组下标重排
array_shift($arr);不考虑返回值,等价于array_splice($arr,0,1);
array_unshift();从前面插入一个值,返回数组个数
array_unshift($arr,$v);不考虑返回值,等价于$arr=array_merge(array($v),$arr);

9、其他常用函数

array_rand();随机取一个key
shuffle();打乱数组
array_sum();数组所有值的和
array_product($arr)求数组乘积
array range ( mixed $start , mixed $end [, $step = 1 ] )获取一个范围内数组
小应用

//生成随机验证码
$arr=range(0,9);
$arr2=range('a','z');
$arr3=range('A','Z');
$arr4=array_merge($arr,$arr2,$arr3);
shuffle($arr4);
$arr5=array_slice($arr4,0,4);
$str=join($arr5,'');
echo $str;

10、超全局数组

1)$_SERVER 查看服务器信息
2)$_GET 地址中参数
localhost/index.php?id=10&name=user1&age=20&sex=nan
echo "<pre>";
print_r($_GET);
echo "</pre>";
可用于超链接传值、表单传值
3)$_POST 表单提交的值
4)$_REQUEST $_GET和$_POST全接收
速度慢,不推荐使用
5)$_FILES 文件上传
6)$_COOKIE 跟踪用户状态
7)$_SESSION 保存会话信息
8)$GLOBALS 获取所有全局变量和超全局变量

转载于:https://www.cnblogs.com/chuanzi/p/10364499.html

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值