Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hi,

ich brauche eimal euren Rat, vermutlich habe mich aktuell total verbaut :)

Ich bin dabei eine Funktion zu schreiben die folgendes erledigen soll.

1) einen Übergeben String in ein Array Überführen (explode)

2) die länge jedes Wortes ermitteln

3) den String neu zusammensetzten, so das eine maximal Anzahl an Zeichen

pro Array Feld nicht überschritten wird.

4) Array zurück geben.

Soweit so gut, hört sich am Anfang nicht so schwierig an.

Jedoch bekomme ich den 3ten Teil nicht sauber gelöst.

Im Nachfolgenden Codeauszug wird die Wort länge überprüft und

beibedarf das Wort gekürzt und im Array angefügt (diese wird richtig aufgebaut).

Das Zielarray mit den fertigen String dagegen wird nicht richtig aufgebaut.

Ich erhalte z.B. nach dem zerlegen jedesmal das Zerlegte Wort doppelt,

ohne das ich mir einen Reihm daraus machen kann.

Vermutlich sehe ich vor lauter Code den Fehler nicht.


$i_arrExplode = 0;
$i_Linecount = 1;
$lineSize = 0;
$runWhile = TRUE;
$lineWord = "";
$Word = "";
$WordSize = 0;
$maxChar = 16;
$BreakMarker = FALSE;
$lineSize_tmp = 0;
while($runWhile === TRUE){
$WordSize = strlen($arrExplode['array'][$i_arrExplode]);
if($WordSize>$maxChar){

$arrSplitWord = str_split($arrExplode['array'][$i_arrExplode], $maxChar-1);
// slicen
$slicePoint = $i_arrExplode+1;
$arrExplode['array'] = array_slice($arrExplode['array'], $slicePoint);
// Zusammenfügen
$arrExplode['array'] = array_merge($arrSplitWord, $arrExplode['array']);
$arrExplode['arraySize'] = count($arrExplode['array']);
$this->setWordLengt($arrExplode);

$BreakMarker = TRUE;
$i_arrExplode = 0;
}//ende maxChar

$Word = $arrExplode['array'][$i_arrExplode];
$WordSize = strlen($arrExplode['array'][$i_arrExplode]);
$lineSize_tmp = 0;
$lineSize_tmp = $lineSize+$WordSize+1; //+1 für Blankzeichen beim zusammenfügen
$this->opMSG("".$lineSize." | ".$lineSize_tmp." ", 2);
$lineWord_tmp = $lineWord." ".$Word;

switch(TRUE){
case $lineSize_tmp>$maxChar:
print "switch 2 case 1 $lineWord <br> ";
$LineSet['range'][$i_Linecount] = $i_arrExplode;
$LineSet['word'][$i_Linecount] = trim($lineWord);

$lineSize = 0;
$lineSize_tmp = 0;
$lineWord = "";
$lineWord_tmp = "";
$i_Linecount++;
break;

case $i_arrExplode==($arrExplode['arraySize']):
print "switch 2 case 2 <br>";
$LineSet['range'][$i_Linecount] = $i_arrExplode;
$LineSet['word'][$i_Linecount] = trim($lineWord);

$lineWord = "";
$lineWord_tmp = "";
$lineSize = 0;
$lineSize_tmp = 0;
$runWhile=FALSE;
break;

default:
print "switch 2 default <br>";
$lineSize = $lineSize_tmp;
$lineWord = $lineWord_tmp;
$i_arrExplode++;
if($BreakMarker==TRUE){
$BreakMarker = FALSE;

}else{
$i_arrExplode++;
}
break;
}// ende switch
if($runWhile==FALSE){
break;
}
}// ende while schleife
[/PHP]

Schon einmal danke für jeden Denkanstoss .

Viele Grüße Tool-Time

Hallo,

ich verstehe ehrlich gesagt nicht wieso du so langen Quellcode hast. Zum einen ist der bissl unübersichtlich und ich blicke da nicht wirklich durch.

Du willst einen Array übergeben und Pro Array Feld mit Text Darf maximal 16Zeichen stehen und die restlichen sollen abgeschnitten werden?

Hier ist eine Funktion die einen Array Rekusriv (Auch Mehrdimensionale Arrays) durchläuft und überall Maximal 16 Zeichen stehen lässt.

<?php
function parseArray($array)
{
$maxLength = 16;

foreach ($array as $key => $value)
{
if (gettype($array[$key]) == "array")
{
$array[$key] = parseArray($value);
}
else
{
if (strlen($array[$key]) > $maxLength)
{
$array[$key] = substr($value,0,$maxLength);
}
}
}
return $array;
}
?>[/PHP]

Ist Dein Code nicht etwas "oversized"? Wenn ich Dich richtig verstehe, willst Du, dass jedes Wort eine bestimmte Länge nicht überschreitet


function setWordLength( $pstr, $pwordlength, $pseperator=" " ) {
if (!is_string($pstr) || !is_string($pseperator) || !is_int($pwordlength) || $pwordlength < 1)
return null;

$larr = explode($pseperator, $pstr);
foreach ($larr as &$lword)
$lword = substr($lword, 0, $pwordlength);
return implode($pseperator, $larr);
}
[/PHP]

  • Autor

Danke für deine Antwort,

ich geb dir recht, durch's viele experementieren ist der code ganz schön

unübersichtlich geworden und oversized.

Ich versuch mein Problem einmal anders zu schildern :

Es gibt einen String, dieser besteht aus "Am Freitag geht die Fußball-WM endlich los. Dummerweise".

Dieser wird per explode in ein Array überführt



$arrExplode[0] = "Am"
$arrExplode[1] = "Freitag"
....
[/PHP]

Jetzt soll anahnd einer maximalen Zeichenlänge der String verlegt und neu ins Array überführt werden.

Was möchte ich damit erreichen ? Am ende soll ein Array stehen

was pro Array[n] eine gewisse Wörter bzw. Zeichenanzahl enthält.

Das könnte dann so aussehen

[PHP]
$maxZeichen = 10
$arrExplode[0] = "Am Freita"
$arrExplode[1] = "g geht die Fuß"
$arrExplode[n] = .....

Hoffe ich konnte meine Gedanken damit etwas besser erklären.

Viele Grüße

Tool-Time

function setWordLength( $pstr, $pwordlength, $pseperator=" " ) {
if (!is_string($pstr) || !is_string($pseperator) || !is_int($pwordlength) || $pwordlength < 1)
return null;

$larr = explode($pseperator, $pstr);
for($i=0; $i < count($larr)-1; ++$i) {
$larr[$i+1] = substr($larr[$i], $pwordlength).$pseperator.$larr[$i+1];
$larr[$i] = substr($larr[$i], 0, $pwordlength);
}

$la = null;
$last = count($larr)-1;
if (strlen($larr[$last]) > $pwordlength)
$la = setWordLength(substr($larr[$last], $pwordlength), $pwordlength, $pseperator);

$larr[$last] = substr($larr[$last], 0, $pwordlength);

if (!empty($la))
$larr = array_merge($larr, $la);

return $larr;
}[/PHP]

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.