Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] zamiana ciągu znaków na liczbę (int)
Forum PHP.pl > Forum > Przedszkole
stania
Witam,

niejako, że jestem bardziej front-endowcem ale muszę ogarnąć pewien problem z php

Muszę zamienić zmienną która ma wartość ciągu znaków na liczbę. W wielkim skrócie dostaję $product_id w formie ciągów znaków i muszę zamienić ją aby była intigerem

  1.  
  2. // w tym miejscu dostaję zmienną wejściową która nie jest liczbą
  3.  
  4. $product_id = 3MADAPTERP3EV;
  5. //w tym miejscu muszę zamienić product_id by był liczbą naturalną (int) np do takiego formatu
  6.  
  7. $product_id = 72145878975;
  8.  
  9.  


Chodzi mi aby zawsze taki sam ciąg znaków np: 3MADAPTERP3EV był konwertowany na tą samą liczbę,


Proszę o wskazówki, przykład, nakierowanie.

Pozdrawiam
Turson
  1. <?php
  2. $product_id = "3MADAPTERP3EV";
  3.  
  4. // tablica zamiany
  5. $nowe_id = array('3MADAPTERP3EV'=>72145878975);
  6. echo $nowe_id[$product_id];
stania
Dzięki za odpowiedź jednak nie wnosi dla mnie nic nowego.

Otóż danych wejściowych mam ok 12 tyś

typu:

  1. $product_id = "3MADAPTERP3EV";


więc ręczna zamiana odpada ;-)


są to produkty na sklepie, które są importowane z pliku xml, tylko że w pliku xml id produktu jest właśnie łańcuchem znaków a ja potrzebuje unikalnego

$product_id w formie liczby int.
kujol
Możesz napisać własną funkcje np.

  1. function zamien($str){
  2. $str = preg_replace('#a#si' , '1', $str);
  3. $str = preg_replace('#b#si', '2', $str);
  4. }
  5.  
  6. $zamien = zamien('a65b');
  7. echo $zamien;
  8.  


Itd. smile.gif
stania
ciekawy sposób, dzięki

a może ktoś się wypowiedzieć na przykładzie jak można to zrobić funkcją haszującą - szukałem przykładów ale ... nie znalazłem zamiany str -> int
kujol
W md5, hash itp. masz zawsze jakieś litery, może jest coś zamieniającego na same cyfry, ale tego nie wiem.
timon27
  1. $string=base64_encode($string);
  2. $string=base_convert($string,64,10);


(być może w funkcji base_convert jako drugiego argumentu bedziesz musiał użyć stringa "ABCDEF...abc..012..9")


hashe raczej tu nie są potrzebne/wskazane. Nic nie musisz ukrywać, a możesz spowodować kolizję.
Gość
Ciekawe jak tamto ID bylo generowane. Jakbys podal wiecej przykladow, to mozna by sprobowac odczytac cos z tamtego.

Co do nowego id, numerycznego

1.
wszystko do malych znakow(znajdziesz odpowiendia funkcje, nie pamietam teraz)
str_replace('a', 11, $where);
str_replace('b', 12, $where);

itp. czyli podobnie jak ktos wyzej pisal

2.
inny sposob
robisz sume
$sum = 0;
$chars=explode('', $oldId);
foreach($chars as $char) {
if !is_numeric($char) {
switch($char) {
case 'a':
$char=11;
break;

chase 'b':
$char=12;
break;
}
}
$sum =+ $char;
}

$sum to nowy id

3.
a jesli nowy id mialby nie miec zwiazku z starym(gorsza opcja, bo nigdy nie wiadomo czy nie trzeba bedzie kiedys tego dopasowywac wstecznie)
to mozna po prostu wylosowac id
np. funkcja rand()
dla id 6 znakowego to bedzie rand(111111, 999999);
albo uzyc do tego aktualnego czasu microtime(true);
Wazniak96
Myślę, że na górze zostały podane już podobne sposoby, ale tutaj skromny kod ode mnie smile.gif
  1. $oldID = '3MADAPTERP3EV';
  2.  
  3. for($i=0; $i < strlen($oldID); $i++)
  4. {
  5. $int = ord($oldID{$i});
  6. $newID .= $int;
  7. }
  8.  
  9. echo $newID;


Kod konwertuje każdy znak do kodu ASCII i dołącza go do stringa newID. Dzięki temu sposobowi możesz w każdym momencie powrócić do pierwotnego ID. Wystarczy pogrupować po 2 cyfrowe liczby i przelecieć w analogiczny sposób funkcją chr smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.