Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 基于字段值的Foreach计数器_Php_Arrays_Loops - Fatal编程技术网

Php 基于字段值的Foreach计数器

Php 基于字段值的Foreach计数器,php,arrays,loops,Php,Arrays,Loops,我有一些代码列出了每家每户的床位。我想使用带有计数器的foreach循环,这样当床位数发生变化时,我可以回显桌子的末尾和新桌子的开头(以便根据卧室的数量区分出售的房屋)。这就是我现在拥有的 foreach ($unitsForSaleData as $row) { if($units_for_sale['beds'] == 0){ echo '<h1> Studios For Sale </h1>'; echo $tableTop; } else {

我有一些代码列出了每家每户的床位。我想使用带有计数器的foreach循环,这样当床位数发生变化时,我可以回显桌子的末尾和新桌子的开头(以便根据卧室的数量区分出售的房屋)。这就是我现在拥有的

foreach ($unitsForSaleData as $row) {
if($units_for_sale['beds'] == 0){
    echo '<h1> Studios For Sale </h1>';
    echo $tableTop;

} else {
    echo $tableBottom;
    echo '<h1>'.$units_for_sale['beds'].' Bedroom Condos For Sale </h1>';
    echo $tableTop;
}

$contentHere
}
foreach($unitsForSaleData作为$row){
如果($U待售单位['beds']==0){
echo“出售工作室”;
echo$桌面;
}否则{
回声$tableBottom;
echo“.$units”出售[“床”]。“卧室公寓出售”;
echo$桌面;
}
$contentHere
}
但是,这段代码会为每一行生成一个新表,所以这并不好。不管怎样,你想这么做吗?我只想在$units_for_sale['beds']发生变化时回显表格标题

试试以下方法:

$beds = 0;

echo '<h1> Studios For Sale </h1>';

while(notendofloop) // foreach ($array as $val)
{
  if($beds != $units_for_sale['beds']){
    if ($beds != 0) echo $tableBottom;

    echo $tableTop;
    $beds = $units_for_sale['beds'];
  }

  echo '<h1>'.$units_for_sale['beds'].' Bedroom Condos For Sale </h1>';
}
$beds=0;
echo“出售工作室”;
while(notendoolp)//foreach($val形式的数组)
{
如果($beds!=$units\u待售['beds'])){
如果($beds!=0)echo$tableBottom;
echo$桌面;
$beds=$units_待售['beds'];
}
echo“.$units”出售[“床”]。“卧室公寓出售”;
}

您尚未提供完整的循环,因此请使用现有的循环详细信息。最基本的是在循环之前初始化一个变量
$beds
,并检查其中的值,以确定何时输出表。

以下是您可以做的事情。在foreach中,可以在循环声明中添加“count”值。以下是符合您要求的代码:

foreach($units as $key=>$units_for_sale){
    if($units_for_sale['beds']!=0){
        echo '<h1>'.$units_for_sale['beds'].' Bedroom Condos For Sale </h1>';
        echo ($key+1!=count($array)?$tableBottom.$tableTop:$tableBottom;
    }else{
         echo '<h1> Studios For Sale </h1>';
         echo $tableTop;
    }
}
foreach($key=>$units\u出售){
如果($units\u for\u sale['beds']!=0){
echo“.$units”出售[“床”]。“卧室公寓出售”;
echo($key+1!=计数($array)$tableBottom.$tableTop:$tableBottom;
}否则{
echo“出售工作室”;
echo$桌面;
}
}

无需计数器,只需使用一个变量跟踪最后一个显示的计数器即可

$last_bed = null;

foreach (...) {
    if($units_for_sale['beds'] == 0){
        echo '<h1> Studios For Sale </h1>';
        echo $tableTop;

    } else {
        if ($units_for_sale['beds'] !== $last_bed) {
            if ($last_bed !== null) { // End previous table
                echo $tableBottom;
            }
            echo '<h1>'.$units_for_sale['beds'].' Bedroom Condos For Sale </h1>';
            echo $tableTop; // Start new table
            $last_bed = $units_for_sale['beds'];
        }
    }
    ... // Display row data here
}
$last_bed=null;
foreach(…){
如果($U待售单位['beds']==0){
echo“出售工作室”;
echo$桌面;
}否则{
如果($units\u for_sale['beds']!==$last\u bed){
如果($last_bed!==null){//结束上一个表
回声$tableBottom;
}
echo“.$units”出售[“床”]。“卧室公寓出售”;
echo$tableTop;//启动新表
$last_bed=$units_for_sale[“beds”];
}
}
…//在此处显示行数据
}

您将以重复的部分结束,例如,假设您的床数结果为1,1,4,1,5,6,7。您将以2个部分结束,1张床。床是有序的,就像0,0,0,0,0,1,1,1,1,2,2,5,5,5,7,7。Barmar的解决方案很好。这是否也适用于foreach循环?如何编码?@GregL是的,这适用于foreach循环或任何其他类型的循环。正如我在回答中所说的,关键是在循环外部初始化变量,并检查其值/在循环内部递增。如果将我的循环核心复制到您的循环中,它应该可以工作,以允许任何键入错误。我尝试过这一方法,但每个循环中仍然只放入一个。这有什么不同吗如果这是一个foreach循环,而不是while?
不应该是
$tableBottom
$tableTop
的一部分,则需要为每个项目打印它们。我已更新了我的答案。您似乎试图直接将
元素放入表中,而不将它们包装在
中r
。所有表元素都必须在这些元素中。不,我们的想法是关闭表($tableBottom)然后回显H1。我刚刚尝试了你刷新的代码,但是没有回显标签中的,它可以工作,只是它回显标题的次数与表中的次数一样多。对不起,你说得对。我一直在向后阅读底部和顶部。