0

問題はかなり単純ですが、完全に説明するのは困難です。データベースからデータ「url」と「section」を取得しています。「セクション」の値は整数です。このデータをすべて別の配列にプルして、別のページに表示します。(これはサイトマップジェネレーターです)

<?php 

$query = "SELECT url, section FROM table WHERE section <= 3";
    $result = db_query($query, $dbh);

    $dynamic_urls = array();
    while ($row = db_fetch_array($result))
    {
    $dynamic_urls[] = "http://example.com/" . checkSection() . $row['url'];
    }

    function checkSection(){
        if ($row['section'] == 1)
        {
            return "web/";
        } 
        elseif ($row['section'] == 2)
        {
            return "email/";
        } 
        elseif ($row['section'] == 3){
            return "print/";
        }
        return "FAILED/";
    }

    ?>

問題は、図のように checkSection() メソッドで配列値 $row['section'] を整数 (1, 2, 3) と比較する際に問題があることだと思います。出力ファイルは、配列 $dynamic_urls をループしてページに出力するだけです。出力例を次に示します。

http://example.com/FAILED/example_permalink1

http://example.com/FAILED/example_permalink2

http://example.com/FAILED/example_permalink3

http://example.com/FAILED/example_permalink4

http://example.com/FAILED/example_permalink5

http://example.com/FAILED/example_permalink6

これらの「FAILED」出力を、探している関連する「web/」、「email/」、または「print/」タイトルにする必要があります。

if ステートメントで $row['section_id'] を整数と比較できないのはなぜですか?

4

1 に答える 1

0

問題は、関数の範囲内で行が受信されていないことです。

function checkSection(){
    if ($row['section'] == 1)
    {
        return "web/";
    } 
    elseif ($row['section'] == 2)
    {
        return "email/";
    } 
    elseif ($row['section'] == 3){
        return "print/";
    }
    return "FAILED/";
}

関数にとって、$row は空白です。これを機能させるには、変数として関数に渡す必要があります。

すなわち。

function checkSection($row){
    if ($row['section'] == 1)
    {
        return "web/";
    } 
    elseif ($row['section'] == 2)
    {
        return "email/";
    } 
    elseif ($row['section'] == 3){
        return "print/";
    }
    return "FAILED/";
}

checkSection($row)
于 2013-06-14T16:51:30.280 に答える