Autor Zpráva
Danqo
Profil
Zdravím mám problém súvisiaci s pretypvaním zo stringu na integer.
Shared memory funkcia mi vráti string ktorý by mal byť číselný od 1 až do 109 s tým, že ak nadobudne hodnotu 109 vráti opäť na 1 avšak tieto čísla mi berie ako string po prvý krát keď spustím skript $last_sended sa inkrementuje až po 109 avšak potom je problém že už nezačne počítať od 1 ale až od 10. Myslím si, že je to spôosobené tým, že shared memory pridáva špeciáne znaky na koniec stringu ak nie je načítaný presne určený počet znakov. Celkovo problém s pretypovaním nemám keďže začne inkrementovať ale zdá sa, akoby to bolo len čiastočné pretypovanie. A tým, že shared memory vracia string som si istý, strlen vypisuje 3, čo je maximálny počet znakov v reťazci ktorý mám nastavený pre shared memory, skúšal som to oddeliť aj cez substr no nepomohlo.
$id_last_sended = 8010;
    $last_sended = 10;    
    $last_sended_open = shmop_open($id_last_sended, "c", 0644, 3);    
    $last_sended = shmop_read($last_sended_open, 0,3);
    //$last_sended = substr($last_sended,0,0);      
    //if(is_string($last_sended)) return substr($last_sended,0,-1).strlen($last_sended);            
    settype($last_sended, "integer");       
    $last_sended<109 ? $last_sended++ : $last_sended=1;      
    $last_sended_new = shmop_write($last_sended_open, $last_sended, 0);
      return("Packet was successfully sent".$last_sended);


Veľká vďaka za pomoc
_es
Profil
Danqo:
Vyskúšaj pretypovanie (int)hodnota.
Jan Tvrdík
Profil
$id_last_sended = 8010;
$last_sended = 10;    
$last_sended_open = shmop_open($id_last_sended, "c", 0644, 3);    
$last_sended = (int) shmop_read($last_sended_open, 0,3); //  settype($last_sended, "integer"); bude fungovat taky, ale tohle je kratší
$last_sended < 109 ? $last_sended++ : $last_sended=1;      
$last_sended = sprintf("%03d", $last_sended);
$last_sended_new = shmop_write($last_sended_open, $last_sended, 0);
return("Packet was successfully sent" . $last_sended);
Nox
Profil
nebo
intval()

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0