Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] zamiana ciągu znaków na liczbę (int)
stania
post 14.03.2014, 21:54:08
Post #1





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 20.05.2005

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
Turson
post 14.03.2014, 22:19:06
Post #2





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


  1. <?php
  2. $product_id = "3MADAPTERP3EV";
  3.  
  4. // tablica zamiany
  5. $nowe_id = array('3MADAPTERP3EV'=>72145878975);
  6. echo $nowe_id[$product_id];


Ten post edytował Turson 14.03.2014, 22:19:54
Go to the top of the page
+Quote Post
stania
post 14.03.2014, 22:27:54
Post #3





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 20.05.2005

Ostrzeżenie: (10%)
X----


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.
Go to the top of the page
+Quote Post
kujol
post 14.03.2014, 22:52:18
Post #4





Grupa: Zarejestrowani
Postów: 324
Pomógł: 27
Dołączył: 21.07.2013

Ostrzeżenie: (0%)
-----


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

Ten post edytował kujol 14.03.2014, 22:52:53


--------------------
;)
Go to the top of the page
+Quote Post
stania
post 14.03.2014, 22:58:24
Post #5





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 20.05.2005

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
kujol
post 14.03.2014, 23:04:13
Post #6





Grupa: Zarejestrowani
Postów: 324
Pomógł: 27
Dołączył: 21.07.2013

Ostrzeżenie: (0%)
-----


W md5, hash itp. masz zawsze jakieś litery, może jest coś zamieniającego na same cyfry, ale tego nie wiem.


--------------------
;)
Go to the top of the page
+Quote Post
timon27
post 14.03.2014, 23:45:39
Post #7





Grupa: Zarejestrowani
Postów: 578
Pomógł: 69
Dołączył: 15.04.2007
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


  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ę.

Ten post edytował timon27 14.03.2014, 23:55:50
Go to the top of the page
+Quote Post
-Gość-
post 15.03.2014, 09:22:36
Post #8





Goście







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);
Go to the top of the page
+Quote Post
Wazniak96
post 15.03.2014, 11:14:24
Post #9





Grupa: Zarejestrowani
Postów: 550
Pomógł: 75
Dołączył: 5.06.2012
Skąd: Lębork

Ostrzeżenie: (0%)
-----


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

Ten post edytował Wazniak96 15.03.2014, 11:15:15
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.05.2025 - 19:43