2012-02-04 16 views
1
<?php 
    $c = count($rank); // 5 

    for ($i = 0; $i < $c; $i++) { 
     $labels [] = array("value" =>$i, "text" => $i); 
    } 

?> 

output: `[{"value":1,"text":1},{"value":2,"text":2},{"value":3,"text":3},{"value":4,"text":4},{"value":5,"text":5}]` 

しかし、私は必要なもの:配列出力構造

[{"value":5,"text":1},{"value":4,"text":2},{"value":3,"text":3},{"value":2,"text":4},{"value":1,"text":5}] 

そのことについて任意のアイデア?

答えて

4

を使用してforループ内のステートメントを変更することであることが表示されます私は思考の私のラインを説明します。

シーケンス5, 4, 3, 2, 1のパターンは何ですか?明らかに、毎回1つずつ減少します。私はすでに$iが1つずつ増えていることを知っています。なぜならそれが私たちのforループを書いたからです。私の目標と$iで利用できるものはかなり近いですから、$iを使用する方法はありますか?

実際にあります。シーケンス5, 4, 3, 2, 1が毎回1つずつ減少すると言っているのではなく、シーケンスが毎回0からまで1ずつ増えると言うことができます。つまり、シーケンスは5 - 0, 5 - 1, 5 - 2, 5 - 3, 5 - 4に相当します。これは、$iと完全に一致することに注意してください。したがって、私たちのソリューションは、以下のことができます。

<?php 
$c = count($rank); // 5 

for ($i = 0; $i < $c; $i++) { 
     $labels [] = array("value" =>($c - $i), "text" => $i); 
} 

これは見て直感のビットを取り、あなたが似たような状況にあり、パターンを把握することはできません場合、あなたは常に新しい変数を導入することができます。

<?php 
$c = count($rank); // 5 


for ($decreasing = $c, $i = 0; $i < $c; $i++, --$decreasing) { 
     $labels [] = array("value" =>$decreasing, "text" => $i); 
} 
2

毎回値を1ずつ減らしたいだけですか?

<?php 
    $c = count($rank); // 5 

    for ($i = 0; $i < $c; $i++) { 
     $labels [] = array("value" =>($c - $i), "text" => $i); 
    } 

?> 
0

どの程度

$labels [] = array("value" => ($c - $i), "text" => ($i + 1)); 
1
<?php 
$c = count($rank); // 5 
$j = $c; 
for ($i = 0; $i < $c; $i++) { 
    $labels [] = array("value" =>$j, "text" => $i); 
    $j --; 
} 
?> 
0

あなたが表示されたコードは、0の上に$i反復するので、その配列を生成しません... 4に対し:その場合は、総カウントからイテレータ数を減算します配列の値は1〜5です。しかし、それは何をする必要が

$c = count($rank); // 5 

for ($i = 0; $i < $c; $i++) { 
    $labels[] = array("value" =>5-$i, "text" => $i+1); 
} 

または多分array_map

$c = count($rank); // 5 
$labels = array_map(function ($n) { 
    return array("value" => 6-$n, "text" => $n); 
}, range(1, $c));