Werte nach Abstand aus string löschen?

unrealzero_php

Erfahrenes Mitglied
Hallo zusammen

Wie kann ich in einem String z.B. jeden vierten Wert löschen?

Beispiel:
3l4kjrq8adu93mo98u3w83u7ic2z7zunafo

Resultat sollte so aussehen:
314jrqadu3mo8u383uic27zuafo
 
Er will doch nicht eine Zeichenkette im String ersetzen, sondern jedes xte Zeichen.

str_replace ist dafür doch ungeeignet?
 
Wieso mit str_replace sucht er die Übereinstimmungen und ersetzt diese mit einem Platzhalter oder eben mit nix
 
Ich würde mit substr arbeiten, und das in einer Schleife laufen lassen bis zum Ende und dann mit ner entsprechenden Addition immer ein Wert überspringen. So ungefähr:
PHP:
$i=0;
$u=3;
$z=0;
$output="";
$str="öisndföksnfösadnjfasofjweoifuhsfh";
while($i<strlen($str))
{
if($z==$u)
{
$output.=substr($str,$i,1);
$z=0;
}
else
{
$z++;
}
$i++;
}
echo $output
Das ganze könnte man noch glaub perfektionieren aber so dürfte es auch funtionieren.
 
Hallo zusammen

Wie kann ich in einem String z.B. jeden vierten Wert löschen?

Beispiel:
3l4kjrq8adu93mo98u3w83u7ic2z7zunafo

Resultat sollte so aussehen:
314jrqadu3mo8u383uic27zuafo

versuchs mal damit:
PHP:
$string="3l4kjrq8adu93mo98u3w83u7ic2z7zunafo";

echo $len =  strlen($string);
$string2 = "";
for($i=1;$i<=$len;$i++)
{
if($i%4!=0)
{
$string2 .=substr($string,$i-1,1);
}
}

Ergebnis steht dann in $string2
Viel Spass damit ;)
 
Zuletzt bearbeitet:
Hi,

versuch mal folgendes:
PHP:
$string = '3l4kjrq8adu93mo98u3w83u7ic2z7zunafo';
$abstand = 4;
$stringLaenge = strlen ($string);
$anzahl = floor ($stringLaenge / $abstand);

for ($i = 1; $i <= $anzahl; $i++)
{
    $start = $stringLaenge - ( $stringLaenge - ( $abstand * $i ) ) - $i;
    $string = substr_replace ($string, '', $start, 1);
}

echo $string;
 
Spontan würde ich es so machen:
PHP:
function str_clear_periodic($string, $period)
{
	$len = strlen($string);
	for ($i = $period; $i < $len; $i += $period)
	{
		$string = substr_replace($string, "", --$i, 1);
	}
	return $string;
}

echo str_clear_periodic("EveRy lIne Ends in RhymE!", 4);

EDIT: Gott so viele Antworten ^^

An dieser Stelle möchte ich auch mal fragen warum man nicht $string[1] = ""; oder = NULL machen kann. Wer weis es?
 
Zuletzt bearbeitet:
@starfoxfs: Deine Lösung mit str_replace würde ich wirklich gerne mal sehen - ich sehe da keinen sinnvollen Lösungsansatz.

Belehre mich eines besseren :).
 
Und noch ne Möglichkeit:
PHP:
$original = "3l4kjrq8adu93mo98u3w83u7ic2z7zunafo";
$ergebnis = str_cut_pos(str_split($original,4));

echo $ergebnis;

function str_cut_pos($array,$pos) {
  $ergebnis = "";
	
  foreach($array as $content)
    (strlen($content)>3)? $ergebnis .= substr($content,0,3): $ergebnis .= $content;
	
  return $ergebnis;
}
Dachte mir, wenn PHP schon mal ne Funktion hat, um einen String in einer angegebenen Schrittanzahl zu zerlegen und diese in einem Array zu speichern, verwende ich die mal... :p
Die Abfrage in der Schleife muß leider sein, weil man ja von jedem Element des Array das letzte Zeichen trennen muß. Und da das letzte Element nicht zwingend 3 oder mehr Zeichen haben muß, ist das halt notwendig...

Sooooooo viele Möglichkeiten :-)
Aber mit str_replace() gehts nicht...
 
Zurück