0

pdo/mysqli が必要な標準であることは理解しています。当面は msql を使用する以外に選択肢はありません。

現在、結果をループしてそれに応じて表示するようにこの設定をしています

foreach($Items as $Item)
{
    if($Item["Col1"] == "valueFoo"){
        echo "<li>display relevant results</li>";                   
    }
} 

Items代わりに foreach ループを条件と組み合わせた場合、配列全体をループせずにこれを行う方法はありますか。あるいは、foreachloop?の前に配列をフィルタリングします。最も効率的なのは何ですか?

現在、60個のアイテムがあり、以下のようなリストに表示しています

$SQL = "SELECT * FROM tableName WHERE Col1 IS NOT NULL";
$Data = mysql_query($SQL, $db);

$Items = array();
    while ($NewRow = mysql_fetch_assoc($Data)) {
    // Append all rows to an array
    $Items[] = $NewRow;
}

echo "<ul>";
foreach($Items as $Item)
    {
        if($Item["Col1"] == "valueFoo"){
            echo "<li>display relevant results</li>";                   
        }
    } 
echo "</ul>";
echo "<ul>";
foreach($Items as $Item)
    {
        if($Item["Col1"] == "valueDoo"){
            echo "<li>display relevant results</li>";                   
        }
    } 
echo "</ul>";
echo "<ul>";
foreach($Items as $Item)
    {
        if($Item["Col1"] == "valueHoo"){
            echo "<li>display relevant results</li>";                   
        }
    } 
echo "</ul>";

より効率的な方法はありますか?PHPに関してはまだまだ初心者です

4

4 に答える 4

2

私がすることは、各チェックを 1 つに結合しforeach、最後までテキストを変数に割り当て、必要に応じてそれらをエコーすることです。複数の sを避けるためにステートメント内でforeach使用します。switchif

foreach($Items as $Item)
    {
      switch($Item["Col1"])
      {
         case 'valuefoo':
         $result_foo="<li>display relevant results</li>";  
         break;
         case 'valuedoo':
         $result_doo="<li>display relevant results</li>";  
         break;
         case 'valuehoo':
         $result_hoo="<li>display relevant results</li>";  
         break;
         default:
         // handle error if there is one
      }                
        }
    } 
echo "<ul>";
echo $result_foo;
echo "</ul>";

echo "<ul>";
echo $result_doo;
echo "</ul>";

echo "<ul>";
echo $result_hoo;
echo "</ul>";
于 2013-10-09T15:05:31.317 に答える
0

テーブルからフェッチされたレコードの順序を変更します。それらがCol1(最初に、次に他の値が)順番に並べられ、変更をチェックしCol1て新しい<ul>グループを開始できるようにします。

$SQL = "SELECT * FROM tableName WHERE Col1 IS NOT NULL ORDER BY Col1";

の値Col1が固定値であり、関数にマップできる場合。同じ名前のローカル関数への呼び出しをディスパッチすることができます。switchそれ以外の場合は、ステートメントを使用する必要があります。

// create some functions to render each value type
function valueFoo()
{
    echo "<li>display relevant results</li>";
}

function valueHoo()
{
    echo "<li>display relevant results</li>";
}

function valueDoo()
{
    echo "<li>display relevant results</li>";
}

$last_col = false;
foreach($items as $item)
{
    $foo = $item["Col1"];
    if($last_col != $foo)
    {
        if($last_col !== false) echo "</ul>";
        echo "<ul>";
    }
    $foo();
    $last_col = $foo;
}
if($last_col !== false)
{
    echo "</ul>";
}
于 2013-10-09T15:20:55.010 に答える