php - 带有条件的PHP foreach循环,如果语句中没有

  显示原文与译文双语对照的内容
0 0

我知道,pdo/是必需标准,因为在我没有选择的时候,我除了使用 msql

现在我有这个设置来循环显示结果并相应显示


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

如果没有整个 array,而且将foreach循环与条件结合在一起,我可以在这里做到这一点。 在 foreachloop 之前筛选 array? 最有效的是什么?

目前我有 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方面仍然是一个新手

时间: 原作者:

0 0

我将要做的是将每个检查结合到一个 foreach 中,将文本分配给变量,然后根据需要。 在 foreach 中,使用 switch 语句来避免多个 if 语句。


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>";

原作者:
0 0

你可以使用以下方法来避免多个 foreaches:


in_array(array("Col1" =>"valueFoo"), $Items);
//...
in_array(array("Col1" =>"valueDoo"), $Items);
//...
in_array(array("Col1" =>"valueHoo"), $Items);

编辑

如果你想要更好的方法,请用这里( 请参见 @Maximus2012 注释) 替换你的整个代码:


while ($NewRow = mysql_fetch_assoc($Data)) {
//Append all rows to an array
 if($NewRow["Col1"] =="valueFoo"){
 $foo = true; 
 } else if($NewRow["Col1"] =="valueDoo"){
 $doo = true;
 } else if($NewRow["Col1"] =="valueHoo"){
 $hoo = true;
 }
} 

if($foo) {
 echo"<ul>display relevant results</ul>";
}

if($doo) {
 echo"<ul>display relevant results</ul>";
}

if($hoo) {
 echo"<ul>display relevant results</ul>";
}

原作者:
0 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>";
}

原作者:
0 0

你可以使用如下所示的内容:


$ValuesAll = array();

foreach ($Items as $Item) {
 $ValuesAll[$Item['Col1']][] = '<li>'. $Item['Col2']. '</li>';
}

foreach ($ValuesAll as $Value) {
 echo '<ul>'. implode('', $Value). '</ul>';
}

这里示例将为每个唯一的$Item['Col1'] 创建 UL 。 所以,如果你有 for valueFoovalueDoovalueHoo,你将得到 3个列表,每个 Col1 都有 Col2 s 。

...