稀疏数组 php
2021/8/14 9:05:48
本文主要是介绍稀疏数组 php,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
当一个数组在中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。
稀疏数组的处理方法;
- 记录数组一共有几行几列,有多少个不同的值。
- 把具有不同值的元素的行列有值记录在一个小规模的数组中,从而缩小程序的规模。
由7x6的数组转换成3x9的稀疏数组
<?php // 稀疏数组 $arr = array(); $row = $col = 11; // 创建个二维数组 填充 0 for ($i = 0; $i < 11; $i++) { for ($j = 0; $j < 11; $j++) { $arr[$i][$j] = 0; } } $arr[0][4] = 1; $arr[2][3] = 1; $arr[3][2] = 1; echo "转换之前的数组\n"; printArray($arr); echo "转换后的数组\n"; $arr = arrayToSparse($arr); printArray($arr); echo "转换回来\n"; $arr = sparseToArray($arr); printArray($arr); // 转为稀疏数组 第一行分别是行数和列数 和有效非 0的总数 function arrayToSparse($arr) { // 获取非的总数 $sum = 0; foreach ($arr as $item) { foreach ($item as $v) { if ($v != 0) { $sum++; } } } $row = count($arr); $col = count($arr[0]); $sparseArray[0][0] = $row; $sparseArray[0][1] = $col; $sparseArray[0][2] = $sum; $count = 1; // 填充有效的 到稀疏数组中 for ($i = 0; $i < $row; $i++) { for ($j = 0; $j < $col; $j++) { if ($arr[$i][$j] != 0) { $sparseArray[$count][0] = $i; $sparseArray[$count][1] = $j; $sparseArray[$count][2] = $arr[$i][$j]; $count++; } } } return $sparseArray; } // 稀疏数组还原 function sparseToArray($arr) { // 新建全 0 的数组 $row = $arr[0][0]; $col = $arr[0][1]; $sum = $arr[0][2]; $old = array(); for ($i = 0; $i < $row; $i++) { for ($j = 0; $j < $col; $j++) { $old[$i][$j] = 0; } } // 填充有效的 1 for ($i = 1; $i <= $sum; $i++) { $old[$arr[$i][0]][$arr[$i][1]] = $arr[$i][2]; } return $old; } // 打印数组 function printArray($arr) { foreach ($arr as $item) { foreach ($item as $v) { echo $v . "\t"; } echo "\n"; } }
结果
╭─mac@macdeMacBook-Pro ~/www/未命名文件夹/test222 ╰─$ php index.php 转换之前的数组 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 转换后的数组 11 11 3 0 4 1 2 3 1 3 2 1 转换回来 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ╭─mac@macdeMacBook-Pro ~/www/未命名文件夹/test222
这篇关于稀疏数组 php的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-19php8的协程和hyperf的协程有什么区别?-icode9专业技术文章分享
- 2024-12-19php8 的fiber是什么?-icode9专业技术文章分享
- 2024-12-05怎么在php8,1 里面开启 debug?-icode9专业技术文章分享
- 2024-12-05怎么在php8,1 里面开启 debug?-icode9专业技术文章分享
- 2024-11-29使用PHP 将ETH账户的资产汇集到一个账户
- 2024-11-23怎么实现安卓+php 热更新方案?-icode9专业技术文章分享
- 2024-11-22PHP 中怎么实现判断多个值是否为空、null 或者为 false?-icode9专业技术文章分享
- 2024-11-11开源 PHP 商城项目 CRMEB 二次开发和部署教程
- 2024-11-09怎么使用php在kaufland平台刊登商品?-icode9专业技术文章分享
- 2024-11-05PHP的抽象类和接口是什么,有什么区别-icode9专业技术文章分享