首页 > 解决方案 > PHP - 如何打印具有特定模式的字符串?(词搜索网格)

问题描述

我需要帮助来打印带有特定单词的字符串。这有点像字谜,它应该显示 SOFTWARESENI。任何人都可以给我一个解决这个问题的想法吗?

$string = "
S Q X C P R T M
R O M S P H P D E V C I
X N F P L Z M H R K N J
P D S T X R N D G E B Y
J Z D G W C W E S X
M B S C N A P E Q
Y Z D G Q V R D S";

$string_to_array = explode("\n", $string);
$i = 0;
foreach ($string_to_array as $key => $value) {
    $per_string = explode(" ", $value);
    $hasil[] = $per_string[$i]; 
    $i++;
}

这是我的结果。


    [0] => S
    [1] => O
    [2] => F
    [3] => T
    [4] => W
    [5] => A
    [6] => R

输出应该是 SOFTWARESENI。

标签: php

解决方案


向下循环一次,向上循环一次,并通过比较 $col 和该行中的项目数来跟踪我们是否撞到“墙”。

// Preperations
$arr = explode("\n", $string);
foreach($arr as &$val){
    $val = explode(" ", $val);
}

// start at:
$col=0;

for($row=0; $row<count($arr); $row++){
    if($col >= count($arr[$row])) break; // stop if we reach the end
    $word[] = $arr[$row][$col];
    $col++;
}

// loop rows backwards
for($row=$row-2; $row>0; $row--){
    if($col >= count($arr[$row])) break; // stop if we reach the end
    $word[] = $arr[$row][$col];
    $col++;
}

var_dump($word);

输出:

array(12) {
  [0]=>
  string(1) "S"
  [1]=>
  string(1) "O"
  [2]=>
  string(1) "F"
  [3]=>
  string(1) "T"
  [4]=>
  string(1) "W"
  [5]=>
  string(1) "A"
  [6]=>
  string(1) "R"
  [7]=>
  string(1) "E"
  [8]=>
  string(1) "S"
  [9]=>
  string(1) "E"
  [10]=>
  string(1) "N"
  [11]=>
  string(1) "I"
}

https://3v4l.org/IJg9d


推荐阅读