数组输出结构

时间:2012-02-04 16:06:18

标签: php arrays for-loop

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

有任何想法吗?

5 个答案:

答案 0 :(得分:4)

我将描述我的思路。

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

确实有。而不是说序列5, 4, 3, 2, 1每次减少一个,我可以说序列每次从5增加。也就是说,序列等同于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);
}

答案 1 :(得分:2)

您是否只是希望每次减少一个值?如果是这样,则从总计数中减去迭代器数:

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

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

 ?>

答案 2 :(得分:1)

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

答案 3 :(得分:0)

怎么样

$labels [] = array("value" => ($c - $i), "text" => ($i + 1));

答案 4 :(得分:0)

您显示的代码不会生成该数组,因为$i迭代超过0 ... 4而数组中的值为1 ... 5。但似乎您需要做的是将for循环中的语句更改为

$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));