php

Einfache Weiterleitung mit php

Will man überprüfen ob ein Wert/String in einem Array vorhanden ist, ist die einfachste Methode in_array. z.B.:

$needle = 1;
$haystack = array(1, 2, 3);
if (in_array($needle, $haystack)) {
  echo 'ok';
}
// Ausgabe: ok

 Obwohl in_array auch mit Arrays als needle funktioniert, liefert dieses Beispiel keine Ausgabe:

$needle = array(1,2);
$haystack = array(1, 2, 3);
if (in_array($needle, $haystack)) {
  echo 'ok';
}

 Denn es wird in dem haystack-Array nach einem Array mit den gleichen Inhalten und nicht nach den einzelnen Werten des needle-Arrays gescucht.

Will man das überprüfen funktioniert das mit array_intersect so:

$needle = array(1,2);
$haystack = array(1, 2, 3);
if (array_intersect($needle, $haystack)) {
  echo 'ok';
}
// Ausgabe: ok

 

Kommen Zahlen aus nicht selbst gepflegten Quellen, können sie in verschiedensten Formaten ankommen. Um sie weiter zu verarbeiten, müssen sie vereinheitlicht werden. Diese Funktion macht das.

function getNumbers($value)
{
	$value = str_replace(' ', '', $value);
	$found = array();
	preg_match('#([^0-9])[0-9]+$#', $value, $found);
	if (empty($found[1]) === false) {
		if (substr_count($value, $found[1]) > 1) {
			return ((float)str_replace($found[1], '', $value));
		}
		switch ($found[1]) {
			case ',':
				$value = str_replace(array('.', ','), array('', '.'), $value);
				break;
			case '.':
				$value = str_replace(',', '', $value);
				break;
		}
	}
	return ((float)$value);
}

 Hier noch ein Codeschnippsel um die Funkion zu testen:

$numbers = array(
	 '-10',
	 '- 10',
	 '.5',
	 '.',
	 '',
	 ' ',
	 ' 5.',
	 '5. ',
	 'abc',
	 '1abc',
	 'abc1',
	 '1000',
	 '1500.12',
	 '1500,12',
	 '1500 12',
	 '150 012',
	 '1 5 0 0 1 2',
	 '1 500,12',
	 '1 500.12',
	 '1500, 12',
	 '1500. 12',
	 '1.500,12',
	 '1,500.12',
	 '-1,500.12',
	 '-1,500,000',
	 '-1,500',
	 '1.500',
	 '-1,50',
	 '-1.500,000',
	 '1500,000,000',
	 '1500.000.000'
);
foreach ($numbers as $val) {
	echo $val . ' - ' . getNumbers($val) . '<br />';
}

 Um Zahlen aus Strings zu extrahieren findet man hier die passende Funktion.

 

Will man aus einem Sting nur die enthaltenen Zahlen (int oder float) erhalten, geht dies mit dieser Funktion: