[PHP] - Jak sprawdzić z jakie znaki usunęła funkcja explode()?


(jacko1998) #1

Witam,

 

znalazłem w sieci taki kod funkcji, która usuwa kilka wybranych znaków.

function multiexplode ($delimiters,$string) {
       
    $ready = str_replace($delimiters, $delimiters[0], $string);
    $launch = explode($delimiters[0], $ready);
    return  $launch;
        
}

potem wykonuję coś takiego

$integer = $_POST['number'];
$delimiters = array('+', '-', '*', '/');
$result = multiexplode($delimiters, $integer);

i wszystko ładnie działa, tylko jak sprawdzić jakie znaki(spośród tych 4) usunęła funkcja explode ? Ewentualnie, czy po usunięciu można zapisać te znaki, które usunęła ta funkcja ?

Ogólnie to robię kalkulator i nie jest to takie proste jak myślałem(user wpisuje ciąg znaków i operatorów->klika 'wylicz'->wyskakuje wynik). Moje myślenie jest złe, ponieważ potem wypisuje to jako string, a nie jako intger. Próbowałem konwertować tego stringa do integera, ale kończyło się to fiaskiem, poniważ php wyrzucało tylko pierwszą liczbę, a tego co było za pierwszym operatorem już nie. No i właśnie dlatego próbuje te operatory usunąć, to co wpisał użytkownik przekonwertować do integera, dopisać te operatory i na końcu wyechować ten cały ciąg. Jeżeli ktoś to zrozumiał, to proszę o pomoc.

 

Pozdrawiam


(Jim1961) #2

Odpal sobie, może Cię to naprowadzi:

$test1 = '341+ 23 / 2';
preg_match_all('#(\+|\-|\/|\*|[0-9]+)#', $test1, $matches);

foreach ($matches[0] as $symbol) {
	echo is_numeric($symbol) ? 'number: ' : 'sign: ';
	echo $symbol;
	echo '<br>';
}

(kostek135) #3

(knyku) #4

 

możesz podziałać coś z funkcją eval()

 

http://pl1.php.net/eval

 

 

np.:

$str = '(1+2*4)/2'; // ciąg znaków który wprowadza user
eval('$result = '.$str.';'); // przypisujesz do $result wynik wyliczenia
echo $result;

w zasadzie to masz już rozwiązanie… ale niech Ci będzie

 

ps. oczywiście jeszcze musisz oczyścić ciąg wejściowy