稀疏数组 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
标签:www,数组,未命名,稀疏,macdeMacBook,php 来源: https://www.cnblogs.com/brady-wang/p/15139855.html