php - PHP如何摆脱多行字符串声明中的换行符,EOD方法不起作用
问题描述
在 PHP 中,我有 2 个来自外部源的字符串,每个字符串包含 32x32 1 或 0。因为这是一项要求,所以我需要将其格式化为 32x32,因为这些位中的每一位都代表一帧中的一个像素。
我面临的问题是,我需要对这些 1 或 0 中的每一个并行执行按位逻辑,因为一个会影响另一个。在 PHP 中,据我所知,我唯一的选择是将它们变成一个数组,其中每个位都是 1 个索引,方法是在每个位之后添加逗号,然后将其分解为一个数组。(但 ofc 可以随时证明我错了 :))但是,当我尝试分解字符串时,换行符会包含在由分解创建的数组中的每个第 32 位(行的最后一位)位上。
我试过 $image = <<<EOD ... EOD; 绕过它的方法,但它不是bueno。我的问题是,是否有一种巧妙的方法可以在两个图像上同时逐位访问每一位数据,以便我可以做一些按位数学?
我目前的 EOD 方法:($image1 和 $image2 格式相同,我只粘贴在 image 1 声明中)。
$image1 = <<<EOD
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,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,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,1,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,1,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,1,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,1,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,1,1,1,1,1,1,1,1,1,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,1,1,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,1,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,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,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,1,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,1,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,1,1,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,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,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,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,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
EOD;
然后爆炸:
$image_array = explode(',', $image1);
创建此输出(取出部分,因此我不需要在此处列出所有 1024 位,但重点是,每个第 32 位末尾都有一个换行符)。
[33] => 0
[34] => 0
[35] => 0
[36] => 0
[37] => 0
[38] => 0
[39] => 0
[40] => 0
[41] => 0
[42] => 0
[43] => 0
[44] => 0
[45] => 0
[46] => 0
[47] => 0
[48] => 0
[49] => 0
[50] => 0
[51] => 0
[52] => 0
[53] => 0
[54] => 0
[55] => 0
[56] => 0
[57] => 0
[58] => 0
[59] => 0
[60] => 0
[61] => 0
[62] => 0
[63] => 0
[64] =>
0
另外,作为一个额外的问题:在我的用例中,是否有一个更好的解决方案,我不需要在声明的每一位之后插入逗号?如果有,那就太棒了。先谢谢各位大佬了,期待你们的解答。:)
解决方案
我会说输入格式实际上是有问题的。如果它是用来描述一个 32*32 的矩阵,那么那些尾随的逗号没有任何意义。
但是,如果您无法解决该问题,则只需实现一个原始解析器即可满足您的需求:
<?php
$input = <<<EOD
0,0,0,
0,1,1,
1,0,0
EOD;
$output = [];
foreach (explode("\n", $input) as $y => $line) {
$output[$y] = [];
foreach(explode(",", $line) as $x => $cell) {
if ($cell != "") {
$output[$y][$x] = $cell;
}
}
}
print_r($output);
输出显然是:
Array
(
[0] => Array
(
[0] => 0
[1] => 0
[2] => 0
)
[1] => Array
(
[0] => 0
[1] => 1
[2] => 1
)
[2] => Array
(
[0] => 1
[1] => 0
[2] => 0
)
)
当然存在其他方法,但没有一种比另一种更好,除非你能说出一个原因......
推荐阅读
- sql - Taryn 用于 SQL 连接的方法
- hadoop - 从 Oracle 获取数据后如何验证 Hive 中丢失的记录
- c# - Xamarin Forms - 自定义渲染器以在 ios 中居中页面标题
- sql - SQL: where [columnName] = CASE WHEN (条件) THEN NULL ELSE [columnName] END
- r - 组合分组/堆叠条形图的不同颜色条 - R
- angular - Ionic2 刷新页面
- maven - 我无法在 Eclipse 中创建 Maven 项目
- permissions - Ubuntu 18.04 /var/lib/snapd 有“其他”写入 40777
- android - Cordova 在新的应用程序窗口 android 中打开应用程序链接
- javascript - 带有标记的 Plotly JS 范围滑块真的很慢