1

我需要一些帮助才能在这里直接思考。我有这个代码来计算正确的数量forecast_conditions是 4;(count($condition) -1) <= 4 ? ', ' : ', eller '.

count($condition)打印5所以我必须在那里有减号。$condition是在一个foreach所以我可以循环的内容forecast_conditions; foreach($whome_answer[weather][forecast_conditions] AS $condition) {.

上面的代码打印onsdag, torsdag, fredag, lördag,出了错误。这就是我想要的方式:onsdag, torsdag, fredag, eller lördag但我无法在代码中正确使用它!我已经测试了各种解决方案(== 4、>= 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 ';

}

这是我从中获取内容的链接:http ://www.google.com/ig/api?weather=,,,59378217,13504219&hl=en

编辑(解决方案但还有一个问题) 下面的代码是解决方案,但它现在正在打印onsdag, torsdag, fredag, eller lördag,而不是我正在寻找的内容。如何删除“lördag”之后的最后一个逗号?如果我$i在 "if 标签" 之后包含以下内容,则如下所示:onsdag, 2torsdag, 3fredag, eller 4lördag, 5

我该如何解决这个问题?

$i = 1;
foreach($whome_answer[weather][forecast_conditions] AS $condition) {
    $i++;

    # 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 $i != 4 ? ', ' : ', eller ';

}
4

3 回答 3

3

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

由于它是 php,我不认为 count 返回 dom 对象的位置,它正在计算其他东西,可能是你在 $conditions 中有多少值。

请考虑这段代码,程序员对程序员,更容易阅读:)

$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 ',';
    }

}

问候托拜厄斯

于 2012-04-11T19:54:48.803 回答
0

您在 count() 条件语句前面缺少 echo ,无论 count() 的结果是什么,这基本上都会使整个语句什么都不做。如果这是复制/粘贴错误,您能否提供更多源代码?

于 2012-04-11T19:39:08.850 回答
0

我正在查看代码...然后在您打印的示例中,我注意到...您在每个 $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) <= 4 ? ', ' : ', eller '如果count($condition)等于 5,将始终测试为真,因此只会返回一个逗号。

编辑:进行更改以响应新问题。

于 2012-04-11T20:13:44.917 回答