Php 如果计数(数据)低于或等于4,则打印一个或两个-不工作

Php 如果计数(数据)低于或等于4,则打印一个或两个-不工作,php,if-statement,Php,If Statement,我需要一些帮助来思考。我有这个代码来计算预测条件的正确数量,即4(计数($condition)-1)=4,!=4、

我需要一些帮助来思考。我有这个代码来计算预测条件的正确数量,即4<代码>(计数($condition)-1)=4,!=4、<4等)

我怎样才能让它正常工作

提前谢谢

编辑

以下是循环:

foreach($whome_answer[weather][forecast_conditions] AS $condition) {

    # KONTROLL
    if(utf8_decode($condition['day_of_week']['@attributes']['data']) == 'mån') {
        $day = 'måndag';

    # KONTROLL
    } elseif(utf8_decode($condition['day_of_week']['@attributes']['data']) == 'tis') {
        $day = 'tisdag';

    # KONTROLL
    } elseif(utf8_decode($condition['day_of_week']['@attributes']['data']) == 'ons') {
        $day = 'onsdag';

    # KONTROLL
    } elseif(utf8_decode($condition['day_of_week']['@attributes']['data']) == 'tors') {
        $day = 'torsdag';

    # KONTROLL
    } elseif(utf8_decode($condition['day_of_week']['@attributes']['data']) == 'fre') {
        $day = 'fredag';

    # KONTROLL
    } elseif(utf8_decode($condition['day_of_week']['@attributes']['data']) == 'lör') {
        $day = 'lördag';

    # KONTROLL
    } elseif(utf8_decode($condition['day_of_week']['@attributes']['data']) == 'sön') {
        $day = 'söndag';
    }



    echo '<a href="javascript:void(0)" class="forecast-link">';
        echo $day;
    echo '</a>';

    echo (count($condition) -1) <= 4 ? ', ' : ', eller ';

}

您在count()条件语句前面缺少一个echo,这实际上会使整个语句不管count()的结果是什么都不起作用。如果这是一个复制/粘贴错误,那么您可以提供更多的源代码吗?

在foreach外部实例化一个名为$i的变量,将其设置为0,并为每个循环递增1,然后检查该变量

因为它是php,所以我不认为count返回dom对象的位置,它是在计算其他东西,可能是在$conditions中有多少个值

请将程序员的代码视为程序员,更容易阅读:

$i=0;
foreach($whome_回答[天气][预报条件]作为$condition){
$i++;
开关($condition['day\u of_week']['@attributes']['data'])){
案例“mån”:
$day='måndag';
打破
案例“tis”:
$day='tisdag';
打破
案例“ons”:
$day='onsdag';
打破
案例“tors”:
$day='torsdag';
打破
案例“fre”:
$day='fredag';
打破
案例“lör”:
$day='lördag';
打破
案例“sön”:
$day='söndag';
打破
}
回声';
如果($i==4)
回声',埃勒';
否则{
如果($i<4)
回声',';
}
}
问候
Tobias

我正在查看代码…然后在您打印的示例中,我注意到…您在每个$condition之后打印“,”,eller”。这会使事情复杂化,因为您要在要检查的条件出现之前打印到屏幕上

逗号对于正确的可读语法是必不可少的,所以不管怎样都要保留它

另一方面,您可以在打印到屏幕之前检查“eller”

所以我对你的代码的解释更像这样

$counter = 1;
$amount = count($whome_answer[weather][forecast_conditions]);
foreach($whome_answer[weather][forecast_conditions] AS $condition) {
    if ($counter == 4) echo 'eller ';
    echo $condition['day'];
    if ($counter != $amount) echo ', ';
    $counter++;
}
我假设您可以根据已有的数据确定日期,并为每个$condition组成“day”键


另外,我注意到您的逻辑,
(count($condition)-1)不确定我是否理解这个问题。听起来好像对count的作用有误解。“如果计数(数据)低于或等于4”只是计数($data),请阅读整个问题。谢谢,但它只打印带有您的答案的
onsdag、torsdag、fredag、lördag,
。请将您的代码片段正确张贴在此处。您有一个错误。你从一开始计数,然后一旦你进入循环就立即加一。当然,我的代码前面有
echo
。这是必需的!请参阅我的编辑以获取完整的循环和指向我获取信息的网站的链接。@Erik-必须确保:]您是否尝试过将括号括在整个条件语句中?e、 g:
echo((count($condition)-1)作为概念证明,他可以在循环的每次运行中尝试echo'ing out count($condition)。如果计数看起来错误,那么这可能是问题的根源。谢谢!我用您的解决方案得到了它,但我得到了一个逗号(
)在字符串末尾。有关详细信息,请参阅我的编辑。我刚刚用代码末尾的最后一条if语句修复了该错误:)非常感谢!:你的答案是最终的解决方案,我将使用它。
$i = 0;
foreach($whome_answer[weather][forecast_conditions] AS $condition) {
    $i++;
    switch($condition['day_of_week']['@attributes']['data']) {
        case 'mån':
            $day = 'måndag';
        break;
        case 'tis':
            $day = 'tisdag';
        break;
        case 'ons':
            $day = 'onsdag';
        break;
        case 'tors':
            $day = 'torsdag';
        break;
        case 'fre':
            $day = 'fredag';
        break;
        case 'lör':
            $day = 'lördag';
        break;
        case 'sön':
            $day = 'söndag';
        break;
    }

echo '<a href="javascript:void(0)" class="forecast-link">';
    echo $day;
echo '</a>';

if($i == 4)
    echo ', eller';
 else {
        if($i < 4)
        echo ',';
    }

}
$counter = 1;
$amount = count($whome_answer[weather][forecast_conditions]);
foreach($whome_answer[weather][forecast_conditions] AS $condition) {
    if ($counter == 4) echo 'eller ';
    echo $condition['day'];
    if ($counter != $amount) echo ', ';
    $counter++;
}