Php 如何在循环中显示单词列表中的特定字母?

Php 如何在循环中显示单词列表中的特定字母?,php,substring,nested-loops,explode,strlen,Php,Substring,Nested Loops,Explode,Strlen,我在一次面试中遇到了这个挑战,我想得到一些帮助来解决它 使用输入字符串:PHP CODING TECH,生成以下输出 PCT PHCT PHPCT PHPCOT PHPCODT PHPCODIT PHPCODINT PHPCODINGT PHPCODINGTE PHPCODINGTEC PHPCODINGTECH 据我所知,逻辑是在空格上分解输入字符串,然后在循环结构中,将每个单词的前导字母显示为单个字符串。在每次迭代中(在第一次迭代之后),最早的不完整单词会显示一个额外的前导字母 这是我的编

我在一次面试中遇到了这个挑战,我想得到一些帮助来解决它

使用输入字符串:
PHP CODING TECH
,生成以下输出

PCT
PHCT
PHPCT
PHPCOT
PHPCODT
PHPCODIT
PHPCODINT
PHPCODINGT
PHPCODINGTE
PHPCODINGTEC
PHPCODINGTECH
据我所知,逻辑是在空格上分解输入字符串,然后在循环结构中,将每个单词的前导字母显示为单个字符串。在每次迭代中(在第一次迭代之后),最早的不完整单词会显示一个额外的前导字母

这是我的编码尝试:

$str = "PHP CODING TECH";
$a = explode(' ', $str);
for ($i=0; $i < count($a); $i++) {
    for ($j=0; $j < strlen($a[$i]) ; $j++) { 
        //echo "<pre>";
        $b[$i][$j] = explode(' ', $a[$i][$j]);
    }
}
echo "<pre>";
print_r($b);
$str=“PHP编码技术”;
$a=爆炸(“”,$str);
对于($i=0;$i$input = "PHP CODING TECH";
$counters = array_fill_keys(explode(' ', $input), 1); // ['PHP' => 1, 'CODING' => 1, 'TECH' => 1]

$bump = false;                                        // permit outer loop to run
while (!$bump) {                                      // while still letters to output....
    $bump = true;                                     // stop after this iteration unless more letters to output
    foreach ($counters as $word => &$len) {           // $len is mod-by-ref for incrementing
        echo substr($word, 0, $len);                  // echo letters using $len
        if ($bump && isset($word[$len])) {            // if no $len has been incremented during inner loop...
            ++$len;                                   // increment this word's $len
            $bump = false;                            // permit outer loop to run again
        }
    }
    echo "\n";                                        // separate outputs
}
$b[$i][$j]=爆炸(“”,$a[$i][$j]); } } 回声“; 印刷品(乙元);; 代码:()()

输出:

说明:

我正在从分解的输入字符串生成一个单词数组和初始长度<代码>$bump具有双重用途;它不仅控制外循环,它还指示在内循环中长度增加的单词
$len
是“可通过引用修改”的,因此任何给定单词的$len值都可以递增并存储,以便在下一次迭代中使用
isset()
用于
$word[$len]
以确定当前单词在下一次迭代中是否有更多可用字母输出;如果没有,则下一个单词有机会出现(直到所有单词都完全显示出来)


当我等待重新打开此页面时,我想出了另一种方法:


@PraveenKumar看起来像是从每个单词的第一个字母开始,然后添加第一个单词的一个字母直到用完,然后添加第二个单词的一个字母直到用完,然后添加第三个单词,依此类推。使用
explode()
将字符串拆分为一个数组。然后使用嵌套循环将想要的字符添加到结果中。不过,我无法想象这会有什么实际用途。这看起来更像是一个家庭作业练习或编码难题,而不是一个真正的编程项目。是的,我在采访中问过这个问题,如何呼应我给出的模式,使用for循环进行分解,用于打印分解字符串后生成的3个不同数组的每个字符
PCT
PHCT
PHPCT
PHPCOT
PHPCODT
PHPCODIT
PHPCODINT
PHPCODINGT
PHPCODINGTE
PHPCODINGTEC
PHPCODINGTECH
$input = "PHP CODING TECH";
$words = explode(' ', $input);                // generates: ['PHP', 'CODING', 'TECH']
$master = '';                                 // initialize for first offset and then concatenation
foreach ($words as $word) {
    $offsets[] = strlen($master);             // after loop, $offsets = [0, 3, 9]
    $master .= $word;                         // after loop, $master = 'PHPCODINGTECH'
}
$master_offsets = range(0, strlen($master));  // generates: [0,1,2,3,4,5,6,7,8,9,10,11,12]

do {
    foreach ($offsets as $offset) {
        echo $master[$offset];
    }
    echo "\n";
} while ($master_offsets !== ($offsets = array_intersect($master_offsets, array_merge($offsets, [current(array_diff($master_offsets, $offsets))]))));  // add first different offset from $master_offsets to $offsets until they are identical