[PHP] Lege arrayvelden verwijderen

Pagina: 1
Acties:
  • 112 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 18-09 14:09

Kaastosti

Vrolijkheid alom!

Topicstarter
Ik heb een stukje script waarmee een blok tekst wordt ingelezen. Elke regel wordt apart in een array gezet. In de tekst komen (helaas) ook lege regels voor. Deze wil ik uiteraard uit de array halen. Ik heb hiervoor het volgende geprobeerd:

PHP:
1
2
3
4
5
6
7
8
9
10
11
for($i=0; $i<sizeof($array); $i++)
{
  if($array[$i] == NULL)
  {
    $array[$i] = 'Leeg';
  }
}

echo "<pre>";
print_r($array);
echo "</pre>";


Ik krijg netjes de array te zien, maar nog steeds met lege velden. Het resultaat van de tekst:
1

2
Dus '1 <enter> <enter> 2' is het volgende in de uitleesactie van de array:
PHP:
1
2
3
4
5
6
7
8
Array
(
    [0] => 1
    [1] => 

    [2] => 
2
)

Er blijft dus iets in de array zitten wat leeg is. Ook wordt 2 ineens op de volgende regel gezet, dus ik vermoed iets met een newline-achtig iets. In de html code die hij genereerd ziet het er zo uit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
<td>1

2<pre>Array
(
    [0] => 1
    [1] => 

    [2] => 
2
)
</pre></td>

Het wazige is, dat is naast == NULL, ook '' (twee quotes) en ' ' (spatie) geprobeerd heb zonder resultaat. Er zit dus iets in de array wat niet herkend wordt alszijnde leeg, maar ook geen code achterlaat in de HTML. Alleen de gevulde velden naar een nieuw array plaatsen is dus ook geen optie, aangezien de lege velden ook als 'vol' worden gezien. HELP!

[ Voor 34% gewijzigd door Kaastosti op 30-10-2003 20:51 ]

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • BRAINLESS01
  • Registratie: April 2003
  • Laatst online: 12-09 09:30
PHP:
1
sizeof($array)


ik kan me vergissen, maar moet dat niet
PHP:
1
count($array)

zijn?

edit:

ik dacht dat het length() moest zijn, maar het is count(); :)

bovendien is sizeof een alias voor count :P

[ Voor 40% gewijzigd door BRAINLESS01 op 30-10-2003 20:55 ]


Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 18-09 14:09

Kaastosti

Vrolijkheid alom!

Topicstarter
Dat maakt niet uit...
count($array)
sizeof($array)
length($array) zal ook wel werken... in ieder geval zijn count() en sizeof() aliassen van elkaar en deze halen ook de correcte grootte van de array op. Het ligt ergens aan de waarde van de 'lege' velden.

[ Voor 5% gewijzigd door Kaastosti op 30-10-2003 20:56 ]

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • BRAINLESS01
  • Registratie: April 2003
  • Laatst online: 12-09 09:30
[quote]Kaastosti schreef op 30 oktober 2003 @ 20:48:
PHP:
1
2
3
4
5
6
7
for($i=0; $i<sizeof($array); $i++)
{
  if(sizeof($array[$i]) == 0)
  {
    $array[$i] = 'Leeg';
  }
}

Je kunt natuurlijk wel tellen hoeveel tekens er in ieder item zitten...

Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 18-09 14:09

Kaastosti

Vrolijkheid alom!

Topicstarter
Maar het gaat er nou juist om dat ze anders zijn omdat ze leeg zijn. Het kan best voorkomen dat er op een regel 1 (zeldzaam) of 2 (komt vast wel voor) karakters staan. Op die manier kun je dus lastig checken op de grootte van de string in dat veld.

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

Verwijderd

empty, strlen, preg_match, zat methoden om te kijken wat een bepaalde string precies bevat.

"" != null, alhoewel null wel naar een lege string wordt omgezet wanneer deze wordt gebruikt waar een string wordt verwacht.

Ik gok dat je trouwens ergens te maken hebt met een \r of een \n

[ Voor 20% gewijzigd door Verwijderd op 30-10-2003 21:05 ]


Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 18-09 14:09

Kaastosti

Vrolijkheid alom!

Topicstarter
een echo van strlen($array[$i]) geeft:
1
2
3
Dan zou dus string 1 ('1') 1 karakter zijn,
string 2 (leeg?) 2 karakters zijn
en string 3 ('3') 3 karakters... weiiiirid

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

Verwijderd

Ik houd het nog steeds op \r of \n in de string.

Doe eens echo ord ( $array [ $i ] ); binnen die loop?

Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 18-09 14:09

Kaastosti

Vrolijkheid alom!

Topicstarter
49 - 1
13 - ?
13 - ?

[ Voor 38% gewijzigd door Kaastosti op 30-10-2003 21:18 ]

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

Verwijderd

Die 13 is dus de ascii code voor een newline character.
Ik weet niet wat je met de regels precies van plan bent, maar ik gebruik dan redelijk vaak trim () op iedere regel, bijvoorbeeld als het om regels uit een configuratiebestand gaat.

Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 18-09 14:09

Kaastosti

Vrolijkheid alom!

Topicstarter
Trim heb ik ook al gedaan, maar die haalt alleen maar spaties aan het begin en einde van de string weg. Newlines doet ie kennelijk niets mee. Ook raar is dan dat hij in de derde ook een newline vindt, terwijl die half goed weergegeven wordt.

Hmm wacht.. als ik het volgende doe:
PHP:
1
2
3
4
if(trim($array[$i]) == '')
{
  unset($array[$i]);
}

Dan blijft er het volgende over:
PHP:
1
2
3
4
5
6
Array
(
    [0] => 1
    [2] => 
2
)

Hij vind dus kennelijk wel dat die ene nu leeg is. Dat is al heel mooi, bedankt voor de hint daarvoor. Alleen wordt '2' nog op de volgende regel geplaatst. Die heeft kennelijk een newline er voor zitten oid :|

[ Voor 47% gewijzigd door Kaastosti op 30-10-2003 21:24 ]

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

Verwijderd

Trim stript net zo goed newline characters, tabs en andere whitespace.
Pagina: 1