в функции невидны параметры, которые ей передаются

У меня такая проблема. Есть функция, которая генерирует часть таблицы. Она объявлена с 5-ю параметрами в отдельном файле "generitem.php":

<?php
function generHTML($rank, $image, $title, $description, $rating){
    
?>
    
<tr>
                    
    <div class="row">
        <td class="search_table_position col-md-1"> <? $rank ?></td>
        <td class="search_table_img col-md-2"> <img src="<? $image ?>" alt=""> </td>
        <td class="search_table_title col-md-8">
            <h3 class="name"><? $title ?></h3>
            <p><? $description ?></p>
        </td>
        <td class="search_table_rating col-md-1"><? $rating ?></td>
    </div>


</tr>

<?php
}
?>

Это вроде бы работает, создаются таблицы, но с пустыми данными переменных. То есть насколько я понял, шаблон таблицы видит их "пустыми",как будто они не определены в данном контексте. Код вызова функции в файле "index.php":

 if (isset($_POST['searchStr'])) {
                    $searchStr = $_POST['searchStr'];
                    $arr = getArray($searchStr);
                    echo "<pre>";
                    print_r($arr);
                    $arrayFilms = $arr["results"];
                    foreach ($arrayFilms as $key => $film) {
                        
                        generHTML($film["resultType"], $film["image"], $film["title"], $film["description"], 10);
                        
                        
                    }
                    //require('components/item.php');
                }

Сам массив $arr не пустой, в нем определены все те данные, с которыми я вызываю эту функцию. Подключаю файл с функцией через include "generitem.php" в файле "index.php"; Я очень плохо знаю php,поэтому прошу в помощи в объяснении, что же я делаю не так. Спасибо


Ответы (1 шт):

Автор решения: Алексей Шиманский

Функция должна либо что-то вернуть и тогда в foreach надо делать echo, либо сразу в функции делать echo.

О том, как вы всё делаете (генерацию html и его связь с текущим кодом и пр.) я не буду расписывать - это дело ваше, да и не текущего вопроса в целом. Но в текущей проблеме надо делать так:

function generHTML($rank, $image, $title, $description, $rating){
    $html = <<<HTML
<tr>                   
    <div class="row">
        <td class="search_table_position col-md-1">$rank</td>
        <td class="search_table_img col-md-2"> <img src="$image" alt=""> </td>
        <td class="search_table_title col-md-8">
            <h3 class="name">$title</h3>
            <p>$description</p>
        </td>
        <td class="search_table_rating col-md-1">$rating</td>
    </div>
</tr>
HTML;

    return $html;
}

//...
//...
//...

foreach ($arrayFilms as $key => $film) {                        
    echo generHTML($film["resultType"], $film["image"], $film["title"], $film["description"], 10);    
}

Надеюсь функция вызывается внутри тега tbody?

→ Ссылка