1

ここでまっすぐに考えるには助けが必要です。私はこのコードを持っており、その正しい量forecast_conditionsは4です。(count($condition) -1) <= 4 ? ', ' : ', eller '

count($condition)印刷5するので、マイナス1が必要です。$conditionにあるforeachので、コンテンツをループできますforecast_conditionsforeach($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

編集(解決策ですが、もう1つの問題) 以下のコードは解決策ですが、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

$ iという名前のforeachの外部で変数をインスタンス化し、それを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()条件ステートメントの前にエコーがありません。これにより、count()の結果に関係なく、ステートメント全体が本質的に何も実行されなくなります。これがコピー/貼り付けエラーの場合、ソースコードをさらに提供できますか?

于 2012-04-11T19:39:08.850 に答える
0

私はコードを見ています...次にあなたの印刷された例を見て、私は気づきました...あなたは各$条件の後に'、' |'、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」のキーを作成できると想定しています。

また、ロジックが5に等しい(count($condition) -1) <= 4 ? ', ' : ', eller '場合は、常にtrueでテストされるため、コンマのみが返されることに気付きました。count($condition)

編集:新しい問題に対応するために変更を加えました。

于 2012-04-11T20:13:44.917 に答える