2012-02-04 96 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循环内的语句来改变

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

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

或者可能。

序列5, 4, 3, 2, 1中的模式是什么?很明显,我每次减少一次。我已经知道$i每次增加一次,因为这就是我们为循环写的。我的目标和$i的可用范围相当接近,那么有什么方法可以使用$i

确实有。我可以说,序列5, 4, 3, 2, 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

您是否只是希望每次减价一次?如果是从总数减去迭代次数:

<?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

您展示不会产生数组,因为$i遍历0〜4,而该代码数组中的值是1 ... 5。但现在看来,你需要做的是使用array_map

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