PHP数组操作全解析,掌握这6种方法你也能成为开发高手

第一章:PHP数组操作全解析,掌握这6种方法你也能成为开发高手

在PHP开发中,数组是最常用的数据结构之一,灵活掌握其操作方法能极大提升代码效率与可读性。以下是六种关键的数组操作技术,适用于日常开发中的多种场景。

数组遍历与键值访问

使用 foreach 可轻松遍历数组并获取键和值。这是处理关联数组和索引数组的推荐方式。
// 遍历关联数组
$data = ['name' => 'Alice', 'age' => 25, 'city' => 'Beijing'];
foreach ($data as $key => $value) {
    echo "$key: $value\n"; // 输出键值对
}

数组合并与拆分

array_merge() 用于合并多个数组,而 array_slice() 可提取子数组。
  • array_merge($arr1, $arr2) 将两个数组的元素合并为新数组
  • array_slice($arr, 2, 4) 从索引2开始截取4个元素

查找与过滤元素

使用 array_filter() 可按条件筛选数组元素。
// 过滤出偶数
$numbers = [1, 2, 3, 4, 5, 6];
$evens = array_filter($numbers, function($n) {
    return $n % 2 == 0;
});
print_r($evens); // 输出: [2, 4, 6]

排序操作

PHP提供多种排序函数,适应不同需求:
函数名用途
sort()升序排列数值数组
asort()按值升序保持索引关联
ksort()按键名排序

添加与删除元素

使用 array_push() 或 [] 添加元素,unset() 删除指定元素。
$list = ['apple', 'banana'];
array_push($list, 'orange'); // 添加元素
unset($list[0]); // 删除第一个元素

数组转字符串与反转

implode() 将数组转换为字符串,array_reverse() 反转元素顺序。
$fruits = ['apple', 'banana', 'orange'];
$str = implode(', ', $fruits); // 结果: "apple, banana, orange"
$reversed = array_reverse($fruits); // 反序: ['orange','banana','apple']

第二章:PHP数组基础与常用操作

2.1 理解PHP数组的类型与结构

PHP中的数组是一种有序映射,支持索引数组、关联数组和多维数组三种主要类型。它们底层均由哈希表(HashTable)实现,既能存储数字键,也能存储字符串键。
索引数组与关联数组
// 索引数组
$colors = array("red", "green", "blue");

// 关联数组
$user = array("name" => "Alice", "age" => 30);
上述代码中,$colors 使用默认整数索引(0,1,2),而 $user 使用自定义字符串键。PHP自动识别并管理键值对存储结构。
多维数组示例
用户ID姓名邮箱
1Alicealice@example.com
2Bobbob@example.com
该表格对应以下多维数组结构:
$users = array(
  array(1, "Alice", "alice@example.com"),
  array(2, "Bob", "bob@example.com")
);
每个子数组代表一行数据,通过嵌套结构组织复杂信息。

2.2 创建与初始化数组的多种方式

在Go语言中,创建和初始化数组有多种方式,可根据场景灵活选择。
声明并指定长度
var arr [3]int
arr[0] = 1
arr[1] = 2
arr[2] = 3
该方式显式声明数组长度,编译时即分配固定内存空间,未赋值元素自动初始化为零值。
使用字面量初始化
  • 直接定义值,由编译器推断长度:[...]int{1, 2, 3}
  • 指定索引赋值,适合稀疏数据:[5]int{0: 1, 4: 5}
多维数组示例
matrix := [2][3]int{
  {1, 2, 3},
  {4, 5, 6},
}
此二维数组包含2行3列,结构清晰,适用于矩阵运算等场景。每个子数组必须长度一致。

2.3 遍历数组:foreach与for的实践应用

在PHP开发中,遍历数组是高频操作,for和foreach是最常用的两种方式,适用于不同场景。
for循环:精确控制索引
当需要按索引顺序访问数组,或进行跨步遍历时,for更具优势。

$numbers = [10, 20, 30, 40];
for ($i = 0; $i < count($numbers); $i++) {
    echo "索引 $i: $numbers[$i]\n";
}
该代码通过$i控制迭代过程,适合索引连续的数组。但每次循环调用count()可能影响性能,建议提前缓存长度。
foreach循环:简洁安全的遍历
foreach专为数组设计,语法更清晰,避免越界风险。

$fruits = ['apple', 'banana', 'orange'];
foreach ($fruits as $index => $fruit) {
    echo "第 $index 个水果: $fruit\n";
}
它自动处理内部指针,支持键值对提取,适用于关联和索引数组。
性能对比参考
方式适用场景性能表现
for索引数组、反向遍历中等
foreach通用遍历、键值对处理较高

2.4 添加、删除与修改元素的核心方法

在现代前端开发中,操作DOM元素是构建动态界面的基础。掌握添加、删除与修改元素的核心方法,是实现页面交互的关键。
添加元素:appendChild 与 insertBefore
使用 appendChild() 可将新元素插入父节点末尾:
const newDiv = document.createElement('div');
newDiv.textContent = '新增元素';
document.body.appendChild(newDiv);
该方法逻辑简单:创建元素后追加到目标容器。若需插入到指定位置,可使用 insertBefore(parent, newElement, referenceElement),精确控制插入顺序。
删除与替换元素
删除节点通过 removeChild() 实现:
const target = document.getElementById('toRemove');
target.parentNode.removeChild(target);
此操作需获取父节点引用,确保安全移除。而 replaceChild(new, old) 则用于替换现有元素,适用于内容更新场景。
  • createElement:创建新节点
  • appendChild:添加子节点
  • removeChild:删除子节点
  • replaceChild:替换子节点

2.5 数组键名与键值的操作技巧

在处理数组时,灵活操作键名与键值是提升代码可读性与执行效率的关键。PHP 提供了多种内置函数来实现这些操作。
常用数组操作函数
  • array_keys():返回所有键名
  • array_values():返回所有键值
  • array_flip():交换键名与键值
  • array_combine():用一个数组的值作为键名,另一个作为值
键值反转示例
$roles = ['admin' => 'Alice', 'moderator' => 'Bob'];
$flipped = array_flip($roles);
// 结果: ['Alice' => 'admin', 'Bob' => 'moderator']
该代码将原数组的值变为新数组的键名。需注意,若原值非字符串或整数,可能引发警告;重复值会导致后者覆盖前者。
键值重组场景
用户ID用户名
101Alice
102Bob
使用 array_combine() 可将两列数据构造成关联数组,便于后续快速查找。

第三章:数组排序与检索实战

3.1 使用sort、rsort实现简单排序

在PHP中,sort()和rsort()是用于对数组进行排序的内置函数。前者按升序排列,后者则为降序。
基本用法
$fruits = ['banana', 'apple', 'cherry'];
sort($fruits);
print_r($fruits);
上述代码将数组按字母顺序升序排列。参数为待排序数组,函数会重新索引数组键。
逆序排序
$numbers = [3, 1, 4, 1, 5];
rsort($numbers);
print_r($numbers);
rsort()将数值从大到小排列,适用于数字或字符串比较。
  • 排序后原键名丢失,索引重置为连续数字
  • 排序依据为值的字符编码或数值大小
  • 不支持关联数组保留键值关系

3.2 利用asort、ksort进行关联排序

在PHP中处理关联数组时,asort和ksort是两个核心的排序函数,分别用于按值和按键对数组进行升序排序,同时保持键值关联。
按值排序:asort
$fruits = ['a' => 'apple', 'b' => 'banana', 'c' => 'cherry'];
asort($fruits);
print_r($fruits);
该代码按值的字母顺序排列数组。执行后,元素顺序变为 a=>apple, b=>banana, c=>cherry,键值关系不变。
按键排序:ksort
$data = [3 => 'three', 1 => 'one', 2 => 'two'];
ksort($data);
print_r($data);
此例将按键的升序重新排列,输出结果为 1=>one, 2=>two, 3=>three,适用于需要规范化键顺序的场景。
  • asort:基于值排序,保留键值映射
  • ksort:基于键排序,常用于索引整理
  • 两者均支持多语言排序规则(如locale设置)

3.3 检索数组元素:in_array与array_key_exists实战

在PHP开发中,准确判断数组是否包含特定元素至关重要。in_array用于检测值是否存在,而array_key_exists则用于确认键名是否存在,二者用途不同但常被混淆。
基础用法对比
  • in_array($value, $array):检查值是否存在于数组中
  • array_key_exists($key, $array):判断指定键是否存在于数组
代码示例与分析
$data = ['name' => 'Alice', 'age' => 25];

// 检查键是否存在
if (array_key_exists('name', $data)) {
    echo "键'name'存在";
}

// 检查值是否存在
if (in_array('Alice', $data)) {
    echo "值'Alice'存在";
}
上述代码中,array_key_exists避免了因访问未定义键导致的Notice错误,而in_array适用于基于值的搜索场景,尤其在数值型数组中更为高效。

第四章:高级数组函数与应用场景

4.1 array_map在数据转换中的高效应用

在PHP开发中,array_map 是处理数组批量转换的核心函数之一。它接受一个回调函数和一个或多个数组作为参数,返回新数组,原数组保持不变。
基础用法示例

$numbers = [1, 2, 3, 4];
$squared = array_map(fn($n) => $n ** 2, $numbers);
// 输出: [1, 4, 9, 16]
该代码将每个元素平方。回调函数 fn($n) => $n ** 2 应用于 $numbers 的每一项,生成新数组。
多数组映射场景
当传入多个数组时,array_map 可并行处理对应键值:

$names = ['Alice', 'Bob'];
$ages = [25, 30];
$profiles = array_map(fn($n, $a) => "$n is $a years old", $names, $ages);
结果为包含描述性字符串的数组,体现其在数据整合中的灵活性。
  • 函数式编程风格,提升代码可读性
  • 避免显式循环,减少副作用
  • 支持匿名函数与内置函数引用

4.2 array_filter实现精准数据筛选

在PHP开发中,array_filter 是处理数组筛选的核心函数,能够根据回调逻辑精确提取所需数据。
基础用法与回调机制
$numbers = [1, 2, 3, 4, 5, 6];
$evens = array_filter($numbers, function($n) {
    return $n % 2 == 0;
});
// 结果: [2, 4, 6]
该函数遍历数组每个元素,并将元素传入回调函数。若回调返回 true,则保留该元素。参数说明:第一个参数为输入数组,第二个为回调函数。
保留键值与空值过滤
  • 默认情况下,array_filter 会重置数组键名
  • 通过标志位 ARRAY_FILTER_USE_KEY 可对键名进行判断
  • 省略回调时,自动过滤“空值”(如 null、false、"")

4.3 array_reduce进行聚合计算实战

在PHP中,`array_reduce`是处理数组聚合的强有力工具,适用于求和、拼接、过滤合并等复杂操作。
基本语法与执行流程

$result = array_reduce($array, function($carry, $item) {
    // 聚合逻辑
    return $carry;
}, $initial);
其中,$carry为累积值,$item为当前元素,$initial为初始值。每次迭代结果将作为下一次的$carry。
实战示例:计算商品总价

$products = [
    ['name' => 'Laptop', 'price' => 5000],
    ['name' => 'Mouse', 'price' => 100],
    ['name' => 'Keyboard', 'price' => 300]
];

$total = array_reduce($products, function($sum, $product) {
    return $sum + $product['price'];
}, 0);

// 结果:5400
该例通过闭包将每个商品价格累加至$sum,实现高效聚合,避免显式循环,代码更函数式、简洁。

4.4 多维数组处理技巧与实际案例

多维数组的遍历优化
在处理大型多维数组时,采用行主序遍历可提升缓存命中率。以下为Go语言示例:

for i := 0; i < len(matrix); i++ {
    for j := 0; j < len(matrix[i]); j++ {
        sum += matrix[i][j] // 顺序访问内存
    }
}
该代码按内存布局顺序访问元素,相比列优先方式性能提升可达30%以上。
实际应用场景:图像像素矩阵处理
图像常以三维数组存储(高×宽×通道),可通过嵌套循环实现灰度化:
  • 外层循环遍历图像行
  • 中层循环遍历列
  • 内层计算RGB加权平均值

第五章:总结与进阶学习建议

构建持续学习的技术路径
技术演进迅速,掌握基础后应主动构建系统性学习路径。例如,在深入理解 Go 语言并发模型后,可进一步研究 runtime 调度机制。以下代码展示了如何通过 GOMAXPROCS 控制并行度,优化高负载场景下的性能表现:

package main

import (
    "runtime"
    "sync"
)

func main() {
    // 设置P的数量以匹配CPU核心数
    runtime.GOMAXPROCS(runtime.NumCPU())

    var wg sync.WaitGroup
    for i := 0; i < 10; i++ {
        wg.Add(1)
        go func(id int) {
            defer wg.Done()
            // 模拟CPU密集型任务
            processTask(id)
        }(i)
    }
    wg.Wait()
}
参与开源项目提升实战能力
实际工程项目中,调试和协作能力至关重要。建议从贡献文档、修复简单 bug 入手,逐步参与核心模块开发。例如,Kubernetes 社区提供“good first issue”标签,帮助新人快速定位可参与任务。
  • 选择活跃度高的项目(GitHub Star 数 > 10k)
  • 阅读 CONTRIBUTING.md 并配置本地开发环境
  • 提交 PR 前确保通过 CI 流水线(如 GitHub Actions)
利用可视化工具分析系统行为
性能调优离不开数据支撑。使用 pprof 生成火焰图可直观识别热点函数:

# 采集运行时性能数据
go tool pprof -http=:8080 http://localhost:6060/debug/pprof/profile
    
工具用途典型命令
go tool trace分析goroutine调度延迟go tool trace trace.out
gops实时查看进程状态gops stack <pid>
14、PHP数组操作全解析 本文全面解析了PHP中的各种数组操作函数,包括数组翻转、排序(如sort、asort、rsort、arsort、natsort等)、合并(array_merge、array_merge_recursive)、切片(array_slice、array_splice)、比较(array_intersect、array_diff)以及其他实用函数(如array_rand、shuffle、array_sum等)。通过详细示例和说明,帮助开发者掌握PHP数组操作的核心技巧,提升数据处理效率。 阅读详情

相关推荐

13、PHP数组操作全解析

本文全面解析了PHP中的数组操作,涵盖了数组的基础操作、多维数组的处理、元素提取、数组切片与分块、键值获取、元素存在性检查、数组遍历、数组归约、搜索操作等内容。同时,文章通过实际应用案例展示了如何综合使用这些数组操作来实现具体功能,并讨论了性能优化、错误处理以及未来发展趋势。无论你是PHP初学者还是有经验的开发者,这篇文章都将为你提供全面的数组操作知识和实用技巧。

qsc9012345的博客 117

PHP中的数组有哪些操作方法?

2. array_splice() :可以从数组中移除元素并返回被移除的部分,同时也可以在指定位置插入新元素。- rsort() :对数组进行降序排序,会改变数组的索引。- sort() :对数组进行升序排序,会改变数组的索引。- krsort() :按键降序对关联数组排序。- ksort() :按键升序对关联数组排序。

alankuo的专栏 741

搭建PX4开发系统(Ubuntu 22.04)

本文是《从零开始学 PX4 无人机开发》系列第二篇,适合开发者在 Ubuntu 系统下快速搭建 PX4 编译与仿真环境,支持 QGroundControl、Gazebo、MAVSDK 等完整工具链。

qq_15856721的博客 4201

php 非常实用的数组方法

一、array_fill

qq_40816144的博客 242

GXHT40温湿度传感器:I2C通信与CRC校验实战解析

本文详细解析GXHT40温湿度传感器的I2C通信协议与CRC校验机制,涵盖硬件连接、时序控制、数据读取及加热功能应用。通过实战案例分享优化技巧与异常处理,帮助开发者提升嵌入式系统中传感器数据的准确性与可靠性。

rgv234567的博客 242

DeepLearning tutorial(7)深度学习框架Keras的使用-进阶

上一篇文章总结了Keras的基本使用方法,相信用过的同学都会觉得不可思议,太简洁了。十多天前,我在github上发现这个框架的时候,关注Keras的人还比较少,这两天无论是github还是微薄,都看到越来越多的人关注和使用Keras。所以这篇文章就简单地再介绍一下Keras的使用,方便各位入门。主要包括以下三个内容: 训练CNN并保存训练好的模型。 将CNN用于特征提取,用提取出来的特征训练SVM。

wepon的专栏 2万+

php常用的方法,PHP常用方法总结

if(!function_exists('dump')){/*** 打印数据* @param mixed $data (可以是字符串,数组,对象)* @param boolean $is_exit 是否退出程序,默认否*/function dump($data, $is_exit = false){echo "";print_r($data);echo "";if($is_exit) exit(...

weixin_39950867的博客 322

RV1126平台librga图像旋转裁剪实战

本文详细介绍了在rv1126平台上使用librga库实现图像旋转和裁剪的方法。首先解释了librga的基本概念和关键对象,包括源图像、目标图像和操作参数。随后分步骤说明了初始化设置、缓冲区创建、裁剪区域定义(通过坐标和尺寸参数)以及旋转操作(支持常见角度)。提供了完整的示例代码演示如何组合裁剪和旋转操作,并强调了性能优化、错误处理、格式支持等注意事项。通过硬件加速的librga,可以在rv1126平台上高效完成图像处理任务。

hwmxrhx的博客 1544

PHP 数组方法合集

创建数组 1、array() 创建一个新数组 2、array_combine($a,$b) 创建一个新数组,用$a的值 作为键,用$b的值作为value值,如果2个数组长度不同则返回false; 3、range($a,$b,$c) 创建一个指定范围的数组 $a -> $b ,$c 步长 例如:(1,2,3,4,5,6); $c=10 (10,20,30,40); 4...

xiaopohai001的专栏 2540

FPGA篮球计分器:从需求分析到模块化实现的实战指南

本文详细介绍了FPGA篮球计分器的设计与实现,涵盖需求分析、模块化设计及实战调试。重点解析了24秒精确倒计时、12分钟比赛计时、比分统计和数码管显示等核心模块的Verilog实现,提供了按键消抖、状态机设计和BCD码处理等关键技术细节,帮助开发者掌握FPGA数字系统设计方法。

sql99的博客 218

pytorch gpu运行安装重点(CUDA12.3)

pytorch gpu加速

weixin_45597212的博客 3万+

PHP常用方法

方法一: 将指定颜色变浅 // 将指定颜色变浅 public static function adjustBrightness($hex, $steps) { // Steps should be between -255 and 255. Negative = darker, positive = lighter $steps = max(-255, min(255, $steps)); // Normalize into a six ch

xiaoyanyan的博客 1076

使用OpenCV从低对比度图像中提取圆形轮廓

希望本文能帮助您从低对比度图像中提取圆形轮在本文中,我们将探讨如何使用OpenCV库从低对比度图像中提取圆形轮廓。低对比度图像通常指的是图像中的亮度差异很小,导致物体边缘不够清晰的情况。在本文中,我们将探讨如何使用OpenCV库从低对比度图像中提取圆形轮廓。低对比度图像通常指的是图像中的亮度差异很小,导致物体边缘不够清晰的情况。通过预处理图像并应用Hough变换,我们能够在低对比度图像中准确地提取圆形轮廓。通过预处理图像并应用Hough变换,我们能够在低对比度图像中准确地提取圆形轮廓。

ByteWhiz的博客 350

深入浅出:PHP中的数组操作全解析

通过本文的学习,你应该对PHP中的数组有了更深入的理解。了解这些基础知识不仅有助于编写功能性的代码,还能提高代码的安全性和性能。未来,你可以进一步探索更多高级主题,如面向对象编程、设计模式以及最佳实践等,从而成为一名更加专业的PHP开发者。

软件架构师笔记 1192

2026保姆级:1小时搞定C# OPC UA客户端开发——PLC与上位机全量数据交互零基础教程

本文介绍了使用C#开发OPC UA客户端的核心流程和关键代码实现。文章首先指出工业上位机开发中OPC UA的重要性,并针对新手常见问题提出了1小时掌握核心功能的解决方案。重点内容包括:选择官方.NET Standard库的优势、5分钟搭建开发环境的步骤、OPC UA客户端架构与通信流程的图解说明,以及完整的客户端基础类代码实现,涵盖了连接管理、证书配置、安全认证等关键功能。通过本文提供的代码模板,开发者可快速实现与PLC等工业设备的稳定数据交互。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 799

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

PHP开发指南 P2:数组与流程控制全解析

示例场景:判断 “成绩及格且出勤达标”(逻辑与)、“会员或消费满额享折扣”(逻辑或)、“未登录则跳转”(逻辑非)。语法结构:通过 “初始值→条件判断→递增 / 递减” 控制循环次数,适合索引数组遍历(已知长度)。专门用于遍历数组(索引数组和关联数组都适用),无需关心数组长度和索引,直接获取键和值,语法更简洁。运算符是实现数据计算、条件比较的核心,分为三类基础运算符,直接决定流程控制的逻辑走向。示例场景:存储用户信息(姓名、年龄、城市)、商品信息(编号、名称、价格)等。循环语句用于重复执行同一逻辑,核心是。

板面山的博客 817

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

PHP-Parser展开操作符:数组展开语法深度解析

在现代PHP开发中,数组展开操作符(Spread Operator)已成为提升代码简洁性和可读性的重要特性。PHP-Parser作为PHP代码解析的权威工具,对展开操作符提供了完整的支持。本文将深入探讨PHP-Parser如何处理数组展开语法,帮助开发者更好地理解和运用这一强大功能。 ## 展开操作符基础概念 展开操作符(`...`)是PHP 7.4引入的重要特性,它允许在数组字面量中展开另一...

gitblog_00399的博客 800

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

php数组,数组相关操作及数组三种遍历方式

数组基础 含义:数组就是系列数据的集合体,他们按设定的顺序排列成一个链的形状”,php中的数组下标可以不是连续的。 定义:(赋值)$arr1 = array(2,34,5,6,7); // 最常见的数组形式,下标为默认下标,就是从0开始的整数$arr2 = array(“a”=>3,”bb”=>11,”cc23”=>6); // 关联数组,下标为字符串,常见$arr3 = array(1=>3,10

宿罪的博客 4274

php数组怎么到字符串数组,如何解析字符串到php数组?

我有一个像这样的数组字符串:Array([TRANSACTION_ID] => SFBT-U1005141804-18DZW[TRANSACTION_REFERENCE] => KRZTV[TRANSACTION_TYPE] => sale[TRANSACTION_STATUS_CODE] => SA[MERCHANT] => safebytes[AFFILIATE]...

weixin_39926016的博客 2358

PHP数组操作全解析与实战应用

数组作为编程语言中最基础的数据结构之一,本质上是将值关联到键的有序集合。在PHP中,数组的实现采用了有序映射(ordered map)的设计理念,使其既能作为索引数组使用,也能作为关联数组存储键值对。这种灵活的数据结构在Web开发中尤为重要,常用于处理表单数据、数据库查询结果和API响应等场景。PHP数组支持动态扩容和混合类型存储,配合丰富的内置函数(array_filter、array_map等)可以实现高效的数据处理。在实战中,合理运用多维数组和数组函数链能显著提升开发效率,特别是在用户管理系统、数据报

weixin_33393017的博客 258

php 解析 js 数组_全面解析Javascript数组方法

本文主要和大家分享Javascript数组方法,希望能帮助大家更加理解Javascript数组。Javascript 数组方法全解析(包含es6)1. 数组自带属性constructor //返回创建数组对象的原型函数length //返回数组对象的长度prototype //这个是老熟人了,可以增加数组的原型方法和属性,这个放在后面的继承中讲2. 数组的方法//首先让我们看看数组的对象属性。Ar...

weixin_42316272的博客 478

PHP数组解析和常见操作

在PHP里面使用最多的数据结构恐怕就是数组了,不过PHP的数组和我们传统意义上的数组区别很大,PHP的数组功能上相当于其它语言里面array+list+map数据结构的集合体,这就是动态语言的强大之处。在PHP里面有2种数组,一种是传统的索引数组,另一种是关联数组,其实就是其它语言里面map数据结构。 底层实现 PHP的数组底层是使用HashTable实现,说到哈希表估计很多人都了解过,PHP数组...

weixin_34112900的博客 530

【PHP基础-6】PHP数组的创建、访问及遍历实例解析

目录1 数组简介2 一维数组的创建、访问和遍历2.1 数组的创建2.2 数组的访问2.3 数组的遍历3 多维数组的创建与访问4 预定义超全局数组变量5 数组内置函数6 归纳参考文章 1 数组简介 (1)定义: 数组是一个能在单个变量中存储多个值的特殊变量。 (2)本质:PHP中的 array 实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。此类型针对多种不同用途进行了优化; 它可以被视为数组、列表(向量)、哈希表(映射的实现)、字典、集合、堆栈、队列等等。 (

m0_64378913的博客 1378

php返回json套数组_php利用嵌套数组拼接与解析json的方法

利用嵌套数组 拼接混合json -包含对象数组// 自 PHP 5.4 起$array = ["status" => "0","message" => "ok","arr"=> []];class Person {public $name;public $age;//定义一个构造方法初始化赋值public function __construct($name,$age) {$...

weixin_39587407的博客 483

PHP 多维数组

多维数组是 PHP中一种包含一个或多个数组的数组,类似于嵌套结构。每个子数组可以包含更多数组,形成多层次的数据结构。多维数组常用于表示复杂数据,如表格、树形结构或数据库查询结果,广泛应用于 Web 开发、数据处理等场景。PHP 多维数组是处理复杂数据的强大工具,适合表示嵌套结构如表单数据或数据库结果。通过嵌套循环、数组函数和验证机制,开发者可以高效管理和操作多维数组。结合表单处理和数据库交互,多维数组在 Web 开发中应用广泛,是构建动态应用的关键。

m0_57545130的博客 997
上一篇: async/await陷阱频发?,深度剖析Rust异步代码常见错误与最佳实践
下一篇: PHP项目总是延期?重构你的后端开发流程,3天提速50%!
CodeIsle
博客等级 码龄1年 145粉丝 1966原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值