#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, не будут работать с пользой. Удалите начальные нули, и все должно быть в порядке.