[php] obcinanie ciągu znaków

0

napisałem funkcję która ma ucinać niepotrzebne znaki nowego wiersza na końcu każdego elementu tablicy:

function wywal_puste($co) {
	foreach($co as $i => $wartosc) {
		do {
			$end = count($wartosc)-2;
			if(substr($wartosc, $end)=="\n") $co[$i] = substr($wartosc, 0, $end);
			else $r = true;
		} while(!$r);
	}
	return $co;
}

no i wykonuje się w nieskończoność...
Co jest nie tak?

0

warunek pętli
} while(!$r);zaprzeczasz zmiennej $r w tym warunku, natomiast w środku pętli dajesz tej zmiennej wartość true

0

no i co w tym złego?
pętla powinna się wykonywać dopóki $r nie jest prawdziwe, a wykonuje się w nieskończoność :/

0

spróbuj tak ( zamiast twojego if'a ):

if(substr($wartosc, $end)=="\n"){
   $co[$i] = substr($wartosc, 0, $end);
   $r=false;
 }else{
   $r = true;
 }

a pętla jest nieskończona dlatego, że nigdzie nie ma instrukcji mówiącej, że r ma być fałszywe ...

0

a czy r nie jest falszywe skoro go NIE MA? :>

0

Nie bardzo - nie ma znaczy nie jest zdefiniowane, jest falszywe znaczy jest zdefiniowane, jest typu bool i ma wartosc false. To troche co innego, nie?

pozdrawiam
johny

0
function wywal_puste($co) {
	foreach($co as $i => $wartosc) {
		do {
			$end = count($wartosc)-2;
			if(substr($wartosc, $end)=="\n") {
				$co[$i] = substr($wartosc, 0, $end);
				$jest = true;
			}
			else $jest = false;
		} while($jest);
	}
	return $co;
}

teraz jest tak i nadal się nie kończy [glowa]

0

A wiesz, że możesz tak? :)

$tablica = array_map('rtrim', $tablica);
0

jakto?
co wykonuje ta instrukcja? :>

0

Teraz to chyba kpisz?
Kliknij na niej w moim poście to się dowiesz.. no wiesz.. już nawet linkujemy funkcje dla leniwych i jeszcze za mało? :/

0

dzięki Marooned [rotfl]

0

To ja skorzystam z wątku i poproszę o wyjaśnienie różnic między array_map a array_walk bo jakoś chyba nie czaję :/

0

array_map wykonuje funkcje jednoargumentowe, a array_walk wieloargumentowe.

0

A dokładniej: array_walk operuje na jednej tablicy poprzez referencję i zwraca bool, array_map operuje na wielu tablicach i zwraca wynik typu array. Poza tym, array_walk może przekazać dodatkowe argumenty do funkcji callback.

Jeśli dobrze rozumuję,

array_walk($tablica, 'rtrim');

jest mniej pamięcio- i czasożerne niż

$tablica = array_map('rtrim', $tablica);
0

racja

0

dzięki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1