Как я могу преобразовать все значения массива в число с плавающей точкой в ​​PHP?

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

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


РЕДАКТИРОВАТЬ:

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

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

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

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

11.12.2008 20:10:44
4 ОТВЕТА
РЕШЕНИЕ

Вы могли бы использовать

$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);
25
11.12.2008 20:53:58

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

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

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

1
11.12.2008 20:19:34

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

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

-2
11.12.2008 20:48:54
Я знаю, что могу использовать отдельные значения. Но у меня есть несколько массивов строк, которые должны быть множественными массивами с плавающей точкой, и приведение не произойдет, если я передам массив, чтобы открыть флеш-диаграмму. Я использую значения с плавающей точкой для рисования флэш-радаров. Решение, опубликованное Роборгом, прекрасно!
markus 11.12.2008 21:08:42

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

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

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

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

        return $output;
    }
0
11.12.2008 21:29:05
:) забавное совпадение. Я не могу этого сделать, мои значения уже хранятся в БД как foats, но когда я их получаю, я получаю строки. поэтому я должен снова преобразовать их в числа с плавающей точкой, прежде чем отправлять их на флэш-память. который работает хорошо сейчас.
markus 11.12.2008 21:42:46
Знаете ли вы, почему значения типа float возвращаются в виде строк? Я знаю, что такие вещи, как simplexml будет возвращать строки ... как вы получаете данные?
rg88 11.12.2008 23:20:14
Как говорит Роборг: Edit: см. Ошибку 44341, которая подтверждает, что MySQL не поддерживает отключение stringify.
markus 11.12.2008 23:30:15