Массив не суммирует числа выше 7

#php #arrays #numbers #sum

#php #массивы #числа #сумма

Вопрос:

Проблема: это все о ранжировании. Этот ранг должен содержать числа от нуля до десяти. Однако я замечаю, что сумма моего массива, в котором хранятся значения, не вводит числа выше 07. Таким образом, он может суммировать только числа от 00 до 07! Я не смог найти ошибку.

Код:

 <tbody>
<?php
  $scores = array(
  "Kyle"   => array("-", 04, 04, 06, 04, 05, 04, 04),
  "Bill"   => array("-", 04, 09, 04, 07, 08, 04, 10),
  "Adam"   => array("-", 04, 04, 04, 01, 04, 04, 04),
  "Johnny" => array("-", 08, 04, 10, 04, 08, 08, 04),
?>

###function to return the sum
function cmp($a, $b) {
  return array_sum($b) - array_sum($a);
}

####sort the ranking into the td
uasort($scores, "cmp");
foreach($scores as $key=>$value) {
  echo "<tr>";
  echo "<th>$key</th>";
  echo "<td class='total' align='center' valign='middle'>" . array_sum($value) . "</td>";
  for($x=0; $x<count($value); $x  ) {
    echo "<td class='games tip' align='center' valign='middle'>".sprintf('d', $value[$x])."</td>";
  }
  echo "</tr>";
}
?>
</tbody>
  

Спасибо!

Комментарии:

1. Восьмеричные числа не имеют цифры 8.

Ответ №1:

Числа, начинающиеся с 0 , рассматриваются как восьмеричные числа и могут содержать только цифры от 0 до 7 . Любая другая цифра рассматривается как разделитель, а не как часть числа. Так 08 и 09 интерпретируются как 0 .

Избавьтесь от всех ваших начальных цифр:

   $scores = array(
  "Kyle"   => array("-", 4, 4, 6, 4, 5, 4, 4),
  "Bill"   => array("-", 4, 9, 4, 7, 8, 4, 10),
  "Adam"   => array("-", 4, 4, 4, 1, 4, 4, 4),
  "Johnny" => array("-", 8, 4, 10, 4, 8, 8, 4),
  );
  

Ответ №2:

В PHP и многих других языках буквенное число с начальным 0 считается записанным в восьмеричном (основание 8). Возможно, вы видели это в разрешениях для файлов Unix, где 0755 представляет 3 байта, а не десятичное число «семьсот пятьдесят пять».

Аналогичные обозначения существуют для шестнадцатеричных (основание 16) и двоичных (основание 2); таким образом, 10 означает десять, но 010 означает восемь, 0x10 означает шестнадцать, а 0b10 означает два.

Поскольку в восьмеричном нет цифр «8» и «9», такие значения, как 08 и 09, не будут работать с пользой. Удалите начальные нули, и все должно быть в порядке.