如何读取整个子字符串

时间:2017-11-01 20:41:20

标签: php

这很难成为一个标题。

基本上我想要做的是,当我得到一些随机二进制代码时,我需要将某些数字模式转换为声明的符号。

例如:

输入:11100011111 输出:ABF

基本上

  • 111 = A,000 = B, 11111 = C ,1111 = D

注意!输出必须按顺序对应,所以如果以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的模式

2 个答案:

答案 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];
}

https://3v4l.org/QfQQ8