<?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}]
有任何想法吗?
答案 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));