split() - String zerkleinern, aber wie?

Radhad

Erfahrenes Mitglied
Ich möchte einen String, der zum Beispiel 7 Zeichen enthält (alles Zahlen) anhand eines Regelsets aufteilen. Die Regel enthält die Länge für die einzlenen Teile, Das Trennzeichen und wie oft getrennt werden soll.

Ich hab erstmal im Manual nach was passendem gesucht und bin auf die split() Funktion gestoßen - genau das was ich brauche. Ich verszehe aber garnicht, wie ich nun den regulären Ausdruck aufbauen muss, damit split() meine Regel korrekt anwenden kann.

Hier mal ein Beispiel mit statischen Werten:
PHP:
$splittedArray = split('={3}=', '123456789', 1);

/* Ergebnis: 
array(1) {
  [0] => string(9) "123456789"
}

Gewünschtes Ergebnis:
array(2) {
  [0] => string(3) "123",
  [1] => string(6) "456789"
}
Kann mir da jemand weiterhelfen?

Das Trennzeichen kann ich dann ja einfach per implode() einfügen lassen um wieder einen String zu bekommen ;)
 
Hallo,
probiers mal mit

PHP:
<?php
$splittedArray  = split('3', '123456789');

echo $splittedArray[0]; // Vor der 3
echo $splittedArray[1]; // Nach der 3
?>

Das wichtigste ist, dass Du <?php schreibst.

=> $splittedArray[0] = 12 und $splittedArray[1] = 456789
 
nach der Länge von n Zeichen, nicht anhand der "3" im String - meinte die Länge!
Ist nen etwas blödes Beispiel :rolleyes:
 
Jo substr, und für das, was vor dem 3ten Zeichen is wäre das dann:
PHP:
<?php

$laenge = 3; 
$vor        = substr('123456789', 0, $laenge); # 123
$nach    = substr('123456789', 3);                  # 456789

?>
 
naja, ich hab mir auch schon überlegt, eine eigene Funktion dafür zu bauen, aber ich dachte es würde auch mit Split gehen, da es bequemer wäre ;)

Ansonsten muss ich mir wohl echt sowas in der Art schreiben:
PHP:
function splitString($string, $chunkLength, $limit = null)
{
  // for-Schleife + substr() und alles in ein array packen
}

Ich schreib nur ungern eigene Funktionen die PHP sehr wahrscheinlich schon intern hat ;)
 
Hm, keine Ahnung ob ich das richtig verstanden habe.
Wenn nicht, einfach ignorieren ;)

PHP:
$str = '123456789';
$n = 3;
$limit = 1;
$trennzeichen = ',';

$split = preg_replace ('/([0-9]{' . $n . '})/', '$1' . $trennzeichen, $str, $limit);

var_dump ($split);

//edit: $str sollte in Quotes.
//edit2: Achja, danach halt noch mit explode() zum Array machen.
 
Zuletzt bearbeitet:
Also die Funktion zum Aufteilen gibt es schon nur ohne Limit :(
Es wäre str_split() gewesen.
Aber zusammen mit zwei Array-Funktionen geht das ganz komfortabel:
PHP:
function lensplit($str, $len, $limit = NULL)
{
	$a = str_split($str, $len);
	if ($limit == NULL)
	{
		return $a;
	}
	
	$aReturn = array_splice($a, 0, $len-1);
	$aReturn[] = implode($a);
	
	return $aReturn;
}
 
Falls PHP Version < 5.0:

PHP:
<?php
function split_this($counter,$string,$limit){
  $split = chunk_split($string,$counter,',');
  $return = explode(',',$split,$limit);
  $return[] = preg_replace('/\,/','',array_pop($return));
  return $return;
}

print_r(split_this(3,'123456789',2));
?>

Etwas umständlich, aber etwas besseres fällt mir momentan nicht ein ;)
 
Zurück