JSON_NUMERIC_CHECK round-fix

Ако искате автоматично да преобразувате низове в числа при json_encode тогава един от начините е с JSON_NUMERIC_CHECK.

Но при него има доста често срещани проблеми като изрязването на телефоните и големите числа.

Това се отнася най-вече за запазени в някакъв обект, база от данни, или други които са пресметнати и са представени в консистентен формат. Например: при запазване на числата +123, 0123, 123 винаги ще се запазят като 123. Когато взимаме тези данни ние знаем, че подадените ни данни ще са вече изчислени, обработени и +123 не може да срещнем ако числото наистина не е низ от символи.

Ето една реализация на същата функционалност както при JSON_NUMERIC_CHECK, която не създава такива проблеми. Числата се заменят само ако не са толкова големи и ако не започват с „+“ или „0“ (т.е. са изчислени числа).


Опростената версия на кода:

function stringToNumeric(&$element)
{
    if(is_string($element) && is_numeric($element)) {
        //Check if normal int or float and change format
        if (ctype_digit($element) && strval(intval($element)) === $element) {
            $element = intval($element);
        } elseif(strval(doubleval($element)) === $element) {
            $element = doubleval($element);
        }
    }
}

function arrayStringsToNumeric(&$array) 
{
    array_walk_recursive($array, "stringToNumeric");
}

function jsonNumericEncode($data, $options = 0, $depth = 512)
{
    //if Has Numberic check and is_array do proper check
    if(($options & JSON_NUMERIC_CHECK) == JSON_NUMERIC_CHECK && is_array($data)) {
        //Remove numeric check
        $options = $options ^ JSON_NUMERIC_CHECK;
        //Make proper type
        array_walk_recursive($data, "stringToNumeric");
    }
    json_encode($data, $options, $depth);
}
jsonNumericEncode

Функцията замества използването на JSON_NUMERIC_CHECK, но може и да се ползва директно като премахнете тази проверка.

function prepareJsonData($data)
{
    //if Has Numberic check and is_array do proper check
    if((is_array($data) && !empty($data)) {
        //Make proper type
        array_walk_recursive($data, "stringToNumeric");
    }
}
$data = prepareJsonData($data);
json_encode($data);

Така накрая в данните може да получите

{
    "phone": "+525526262",
    "number: 12512521, 
    "phone2": "0025542424252",
    "money": 22.23
}

вместо

{
    "phone": 525526262,
    "number: 12512521, 
    "phone2": 25542424252,
    "money": 22.23
}

Има и друго решение, което според мен не е толкова ефективно. Можете да продължите с използването на JSON_NUMERIC_CHECK, но да промените малко данните за да се запазят все пак като низ от символи:

function prepareJsonWithNumberCheck(&$data) {
array_walk_recursive($data, function(&$element) {
    //Check if big int or number and add space
    $same = strval(intval($element)) == $element;
    if (ctype_digit($element) && !$same) {
        $element = "" . $element . " ";
    } elseif(!$same && !preg_match('/^(\+|0)[0-9]+$/', $element)) {
        $element = "" . $element . " ";
    }
});
}

, , ,

Няма коментари

Открийте лицата

image

Колко лица можете да откриете на тази снимка?

, ,

Няма коментари

Сложна задача

Дадено ви е, че A = 1, B = 2A, C = 3B, …, Z = 26Y. Намерете (X – A) * (X – B) * (X – C) * … * (X – Z) = ?.

2 коментара

Една тайна на природата – Robert Full: The secrets of nature’s grossest creatures

Няма коментари

Menu Android Апликация

Една апликация правена от мен. За Менюта на ресторанти, кафета и др. С възможност за качване на собствено меню директно от приложението.

2014-02-21 15.21.182

Може да се намери в Google Play: https://play.google.com/store/apps/details?id=in.ivel.menu

Ето и едно кратко видео с част от възможностите.

Необходими характеристики:

  • Интернет (задължително)
  • Камера
  • GPS
  • Google Play Services (приложението Google Play)

За тестване на всички функции, устройството ви трябва да има изброените по-горе характеристики.

Използвани библиотеки:

Прочети цялата страница »

Няма коментари

  • Страница 1 от 45
  • 1
  • 2
  • 3
  • 4
  • ...
  • 45
  • >

Лични проекти

Мои проекти или такива в които съм взимал активно участие

Menu Android Апликация

На 10.05.2014
Android, Java, Важни, Проекти

Bebeshko.com

На 10.03.2014
Проекти, Сайтове

Компютърна графика Javascript

На 21.01.2014
Java-Script Код, JavaScript, Код

Imotiko.com

На 13.01.2013
JavaScript, Проекти, Сайтове

, , ,

Arts International mobile app

На 25.05.2012
Android, JavaScript, Sencha Touch, Smartphone, Проекти

Hp exclusive club

На 25.05.2012
Android, JavaScript, Sencha Touch, Smartphone, Проекти



Код

Примерни фрагменти, функции, модули за различни програмни езици

JSON_NUMERIC_CHECK round-fix

На 01.08.2016
PHP Код, Важни, Код

, , ,

Разделяне на локация в 2 отделни полета

На 16.12.2015
MySQL/SQL, Код

Bootstrap качване на файл

На 17.03.2015
Bootstrap, Java-Script Код, Код

, ,

Активна навигация

На 05.05.2014
PHP Код, Код

Проверка за съществуване на Google Play Services – Android

На 02.03.2014
Android Код, Код

Анимация, чрез снимка – jQuery

На 01.03.2014
HTML5 Код, Код, Публичен код

, ,