преобразование числа из строки в отрицательный int

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Можно вопрос, а зачем вообще приводить их к одному 4-х байтному типу x86? На индекс на конкретной машине как повлияет?
года 2 назад я протупил и на одной из машин оказалась OS с 32мя битами.
код уже написан под то, что ip лежит в int unsigned.
можно переписать под bigint signed, можно просто работать со строками, но прямо сейчас там

PHP:
        if (isset($clicks[$ip_int][$user_id])
            && ($clicks[$ip_int][$user_id] + self::REPEAT_INTERVAL > $timestamp ))
        {
$ip_int - индекс массива, и если я из базы заполню ключом 3579310280, а потом из лога прочту ip2long("213.87.240.200"), то это два разных индекса, а должен быть один.
php -r '$x = ["3579310280"=>1,-715657016=>2]; var_dump($x);'
array(2) {
'3579310280' => int(1)
[-715657016] => int(2)
}
Я понимаю, что можно просто работать со строками :)
Не так часто я встречаю элементарные задачи, которые сходу не знаю как решить.
 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
Я внимательно прочитал и не понял, в чем проблема.

код уже написан под то, что ip лежит в int unsigned
...
из базы заполню ключом 3579310280
Отлично, значит при чтении из базы будет строка, всегда представляющая unsigned.

а потом из лога прочту ip2long("213.87.240.200")
sprintf("%u", ip2long("213.87.240.200")) даст всегда одинаковый результат. Строку, ровно такую же, как в базе.

Если где-то вдруг окажутся unsigned ints, а не строки - по барабану же, php arrays все равно.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
работать со строками вместо int - тоже вариант, да
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
тут в любом случае нужно приведение ключей массива или к numeric, или к double :)
приводить при чтении из файла к numeric или к double я не додумался
 
Последнее редактирование:
Сверху