выходная структура массива - PullRequest
1 голос
/ 04 февраля 2012
<?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 ]

4 голосов
/ 04 февраля 2012

Я опишу мою линию мышления.

Что такое шаблон в последовательности 5, 4, 3, 2, 1? Совершенно ясно, я уменьшаю на единицу каждый раз. Я уже знаю, что $i увеличивается на единицу каждый раз, потому что именно так мы написали наш цикл 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);
}
2 голосов
/ 04 февраля 2012

Вы просто хотите, чтобы значение уменьшалось на единицу каждый раз?Если это так, вычтите количество итераторов из общего числа:

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

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

 ?>
1 голос
/ 04 февраля 2012
<?php 
$c = count($rank); // 5
$j = $c;
for ($i = 0; $i < $c; $i++) {
    $labels [] = array("value" =>$j, "text" => $i);
    $j --;
}
?>
0 голосов
/ 04 февраля 2012

Код, который вы показываете, не будет создавать этот массив, потому что $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));
0 голосов
/ 04 февраля 2012

Как насчет

$labels [] = array("value" => ($c - $i), "text" => ($i + 1));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...