这很难成为一个标题。
基本上我想要做的是,当我得到一些随机二进制代码时,我需要将某些数字模式转换为声明的符号。
例如:
输入:11100011111
输出:ABF
基本上
注意!输出必须按顺序对应,所以如果以111开头,输出必须以A(所述模式的声明符号)开头。 还有一个D,基本上C的前四个字符与D相同,但它必须输出最相似的一个。
首先我尝试将其置于for
循环中
所以,检查字符串字符,如果有一个1回声,反之亦然
for ($i=0; $i < $getInput[$i] ; $i++) {
if ($getInput[$i] == 1) {
echo "ONE";
} elseif ($getInput[$i] == 0) {
echo "ZERO";
}
}
这只是用于测试,基本上在这个理论中,我可以检查是否存在连续模式,因此它将引用已经分配了不同模式的数组,然后输出符号,无论分配给该模式。
我也尝试过使用foreaches,但由于经验不足......
我做了一些研究,发现了这个主题: How do I check if a string contains a specific word?
使用此代码后有哪些帮助
$a = '1110001111';
if (strpos($a, '1111') !== false) {
echo 'D';
}
它以正确的顺序输出字符,这种方法的问题是,它有点意味着id需要重复写出if语句,其次如果输入中有1111,则需要111和1111部分作为两个不同的字符串并输出它们
编辑:
基本上我刚才想到的是,我实际上需要将4位数字与不同的模式进行比较,我可以将字符串放入一个数组中,将其拆分为4&#39;然后与另一个包含声明模式的数组进行比较(1111) = a等..),所以在一个4位二进制0000中,可以有大约17种不同的模式,因此不需要任何高于&gt; 4的数据
然后,如果有一个奇数的1和0,那么有些人会被遗忘。 然后这些应该按原样输出。因此,如果有1010110 = A110,因为A被声明为1010的模式
答案 0 :(得分:0)
此代码将为您提供4位数的数组,然后您可以通过foreach和查找来解析它。
<?php
$string = "11111001011100001111";
$matches = [];
preg_match_all("/[1|0]{4}/", $string, $matches);
echo "<pre>";
print_r($matches);
其输出结果如下:
<pre>Array
(
[0] => Array
(
[0] => 1111
[1] => 1001
[2] => 0111
[3] => 0000
[4] => 1111
)
)
答案 1 :(得分:0)
您可以使用str_split将字符串拆分为四位数的字符串 然后我使用带有替换的关联数组。
我循环匹配数组和回声替换字符。
$str = "111000111111";
//preg_match_all('/(.)\1*/', $str, $match);
$digits = str_split($str, 4);
$replace = array("1110" => "A", "0011" => "B", "1111" => "C");
Foreach($digits as $val){
Echo $replace[$val];
}