Как я могу преобразовать все значения массива в число с плавающей точкой в ​​PHP? - PullRequest
6 голосов
/ 11 декабря 2008

Я извлекаю массив с плавающей точкой из моей базы данных, но полученный массив преобразовал значения в строки.

Как я могу снова преобразовать их в числа с плавающей запятой без циклического перемещения по массиву?
Кроме того, как я могу получить значения из базы данных без преобразования их в строки?


EDIT:

  • Я использую Zend Framework и использую PDO_mysql. Значения хранятся по одному на столбец, и это требование, поэтому я не могу их сериализовать.

  • array_map('floatval', $array) работает только для одномерных массивов.

  • Я не могу floatval отдельных элементов, когда я их использую, потому что мне нужно передать массив на мой флэш-график.

  • Мгновенное решение, не являющееся универсальным, состоит в том, чтобы извлечь строки и выполнить array_map('floatval',$array) с каждой строкой.

Ответы [ 4 ]

22 голосов
/ 11 декабря 2008

Вы можете использовать

$floats = array_map('floatval', $nonFloats);

Существует опция PDO::ATTR_STRINGIFY_FETCHES, но, насколько я помню, MySQL всегда имеет значение true

Редактировать: см. Ошибка 44341 , которая подтверждает, что MySQL не поддерживает отключение stringify.

Изменить: вы также можете сопоставить пользовательскую функцию, как это:

function toFloats($array)
{
    return array_map('floatval', $array);
}

$data = array_map('toFloats', $my2DArray);
1 голос
/ 11 декабря 2008

Как вы получаете ваши данные? mysql, mysqli или PDO, какой-то другой путь или даже какая-то другая база данных?

вы можете использовать array_map с floatval следующим образом: $data = array_map('floatval', $data); но это все еще выполняет цикл, и я думаю, что предполагается, что у вас есть только один столбец в ваших данных.

вам, вероятно, лучше всего использовать лидирующие значения при использовании своего значения, если это необходимо. В любом случае, php хорошо поработает над правильной интерпретацией.

0 голосов
/ 12 декабря 2008

LOL ... ты работаешь над тем же проектом, что и я?

Я только что закончил (прошлой ночью) создание чего-то в проекте на основе ZF, которое использует pdo_mysql для извлечения и форматирования данных, а затем выводит их в виде xml для использования во флэш-памяти. Значения входили в виде строк, но должны были быть плавающими. Так как я также написал часть, которая получает данные, и тот, кто создал базу данных, я просто позаботился о том, чтобы данные были преобразованы в плавающие, прежде чем они попадут в базу данных.

Я просто приводил значения как float как часть какого-то другого форматирования, для чего это стоит.

protected function _c2f($input)
    {
        $input = (float)$input;
        $output = round(($input * 1.8) + 32, 2);

        return $output;
    }
0 голосов
/ 11 декабря 2008

Не уверен, что вы спрашиваете здесь? Вы можете преобразовать строку в число с плавающей точкой, используя (float) $string, но, поскольку PHP динамически типизирован, это произойдет в любом случае, когда это необходимо. Нет причин делать явное приведение.

Для чего вы используете значения с плавающей запятой?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...