使用循环 PHP、对角线检查增加 IF 语句中的条件

Jac*_*ain 7 php arrays loops if-statement matrix

我有作业要在 PHP 中完成这个程序,它需要一个矩阵和关键字,所以它可以在矩阵中对角地找到它们:

在此处输入图片说明

所以这就是第一个矩阵的样子,有很多不同的关键字,例如关键字是“beef”和“pork”。所以我为输入制作了一个程序,看起来像这两个例子:

在此处输入图片说明在此处输入图片说明

这两个的正确输入在这里:

在此处输入图片说明 在此处输入图片说明

这是我的代码仅适用于第一种情况,我不知道如何创建一个循环来产生越来越多的条件,而不是在 if 语句中用 && 写下所有这些条件。

请给我一些关于如何做的提示:

<?PHP


$input_line = trim(fgets(STDIN));
$input_array = explode(" ",$input_line);

// get mojiban
$mojiban = array();
for($ix=0; $ix<$input_array[0];$ix++){
    $mojiban[] = str_split(trim(fgets(STDIN)));
}

//get words
    $words = array();
    for( $kx = 0; $kx < $input_array[1]; $kx++ ){
    $words[] = trim(fgets(STDIN));
}

////check verticales
//get word
    $wordCharArray = array();
for($dx=0; $dx < $input_array[1]; $dx++){
    $wordCharArray = str_split($words[$dx]);

//looping and checking
    
    for ( $line = 0; $line < $input_array[0] ; $line++) {
        for ( $column = 0; $column < $input_array[0] ; $column++ ){
           // for ($wordsNumber = 0; $wordsNumber < $input_array[1] ; $wordsNumber++){
            
                if ($mojiban[$line][$column] == $wordCharArray[0] && $mojiban[$line+1][$column+1] == $wordCharArray[1]) {
                    echo ($column+1)." ".($line+1)."\n";
                
            //}
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Raj*_*del 3

这是目前问题的解决方案,它仅检查对角线元素。您可以从下面根据需要进行重构。

有许多不同的解决方案,但我粘贴的代码解决方案首先检查数组中的字符匹配。如果存在匹配,它将继续从找到第一个元素的位置开始沿对角线检查该元素。

<?php

// First martix
// $searchWords = ["BEEF", "PORK"];
// $matrix = ["HPPLLM", "UROQUV", "FBSRZY", "DPEFKT", "GBBEUY", "EMCQFY"];

// Second martix
$searchWords = ["ABA", "BAB"];
$matrix = ["ACEG", "HBDF", "EGAC", "DFHB"];

// returns true if it diagonally matches the element in matrix from start row
function checkDiagonallyForString(string $search, array $matrix, int $startRow, int $firstMatchPosition)
{
    $endRow = $startRow + (strlen($search) - 2);
    $finding = true;

    foreach (range($startRow, $endRow) as $searchIndex => $rowValue) {
        if (!$finding) {
            break;
        }
        $char = $search[$searchIndex + 1];
        $finding = $matrix[$rowValue][$firstMatchPosition + $searchIndex] == $char;

    }
    return $finding;
}

// format: [word: [column, row]]
$found = [];

foreach ($matrix as $row => $matrixString) {
    if (!count($searchWords)) {
        break;
    }
    foreach ($searchWords as $wordRow => $word) {
        $position = strpos($matrixString, $word[1]);
        if ($position != false) {
            if (checkDiagonallyForString($word, $matrix, $row, $position)) {
                // $position = column of matrix
                // $row = row of matrix
                $found[$word] = [$position, $row];
                unset($searchWords[$wordRow]);
            }
        }
    }

}

// Pretty output
echo "<pre>";
print_r($found);

foreach ($found as $word => $indexes) {
    echo $word . " " . implode(" ", $indexes) . "\n";
}
Run Code Online (Sandbox Code Playgroud)

结果是: 在此输入图像描述在此输入图像描述

注意:这是一个完整的答案,但在复制和粘贴之前,请尝试获得一个总体思路并尝试自己解决它。这不是唯一的方法。