filter array op strings

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Afra ca

Afra ca

10/06/2009 13:23:00
Quote Anchor link
Gegroet,

Ik schaam me lichtelijk omdat dit een relatief simpel probleem is, toch kom er niet helemaal uit. Ik heb een array met strings. Daar wil ik bepaalde strings uitfilteren. Laten we zeggen "test.txt" en "test2.txt". Nu zal dit op een leuke manier kunnen met array_filter lijkt mij, en normaal zal ik de juiste toepassing uit de examples genoemd op php.net vissen. Echter, ik vind ze niet helemaal duidelijk. Hoe zou ik dit moeten oplossen?

Voorbeeld array:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

$testarray
= array("iets.txt","nogiets.png","test.txt","weereen.txt","test2.txt");

?>


Dus filteren en opnieuw ordenen
Gewijzigd op 01/01/1970 01:00:00 door Afra ca
 
PHP hulp

PHP hulp

23/11/2024 09:14:57
 

10/06/2009 13:29:00
Quote Anchor link
Moeten dan alle txt's d'r uit of alleen de tests?
Als alleen de txt's d'r uit kunnen dan kan je dit doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$testarray
= array("iets.txt","nogiets.png","test.txt","weereen.txt","test2.txt");
function
filter_txt($var) {
return (substr($var, -3, 3) == 'txt') ? 0 : 1;
}

$returnarray = array_filter($testarray, "filter_txt");
var_dump($testarray, $returnarray);
?>

Als alleen dingen met test d'r uit moeten dan kan je
(substr($var, -3, 3) == 'txt')
vervangen door:
(substr($var, 0, 4) == 'test')
Ow en je moet zelf effe orderen, maar dat lukt je wel :-).
Gewijzigd op 01/01/1970 01:00:00 door
 
Afra ca

Afra ca

10/06/2009 13:59:00
Quote Anchor link
Misschien dat ik gek ben, maar substr. heeft als return value toch gewoon een string en zou niet in een ternary gebruikt kunnen worden?

En, niet vervelend bedoeld hoor, maar denk dat ik beetje te lang php heb laten liggen, hoe zou ik een array met filter-woorden moeten toepassen hier (zonder in de return overal OR ..... OR ...... te typen?

Dus:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php

//dit:
$testarray[0] = "iets.txt";
$testarray[1] = "nogiets.png";
$testarray[2] = "test.txt";
$testarray[3] = "weereen.txt";
$testarray[4] = "test2.txt";

//moet worden

$testarray[0] = "iets.txt";
$testarray[1] = "nogiets.png";
$testarray[2] = "weereen.txt";
 
?>
Gewijzigd op 01/01/1970 01:00:00 door Afra ca
 

10/06/2009 14:05:00
Quote Anchor link
Afra schreef op 10.06.2009 13:59:
Misschien dat ik gek ben, maar substr. heeft als return value toch gewoon een string en zou niet in een ternary gebruikt kunnen worden?

Klopt. Substr geeft een deel van de string terug, die vergelijk ik. Ik wil weten of het laatste deel gelijk is aan txt, dus doe ik een substr en vergelijk ik dat met txt. Als dat aanelkaar gelijk is, dan gaat de ternary dus naar true, waar ik false terug geef omdat ik die niet in de array wil ;-).

Afra schreef op 10.06.2009 13:59:
En, niet vervelend bedoeld hoor, maar denk dat ik beetje te lang php heb laten liggen, hoe zou ik een array met filter-woorden moeten toepassen hier (zonder in de return overal OR ..... OR ...... te typen?

Mjah, wat wil je nu precies filteren? Is het niet goed wat ik doe?

Edit:
Ja, dan moet je die substr even aanpassen. Maar dan wordt wel alles met test in het begin genegeerd.
Gewijzigd op 01/01/1970 01:00:00 door
 
Joren de Wit

Joren de Wit

10/06/2009 14:09:00
Quote Anchor link
Voor mij is het ook niet duidelijk wat je nu precies wilt filteren? Gaat het om bepaalde woorden (test?) die je niet in je array wilt hebben?

Gebruik dan bijvoorbeeld strpos() om te kijken of die delen in de entries van je array voorkomen.
 
Afra ca

Afra ca

10/06/2009 14:11:00
Quote Anchor link
In m'n edit van m'n vorige post kan je zien wat ik precies bedoel. Ik snap hoe ik strpos moet toepassen op een var, maar niet een array..... Een for of while loop?

edit: Gehele bestandsnamen die ik zelf definieer in een array moeten eruit worden gefilterd.
Gewijzigd op 01/01/1970 01:00:00 door Afra ca
 
Joren de Wit

Joren de Wit

10/06/2009 14:15:00
Quote Anchor link
Zoiets dus?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$aWoorden
= array(
    'foo',
    'bar',
    'foobar',
    'barfoo'
);

$aFilter = array(
    'foobar',
    'bar'
);

$aFiltered = array_diff($aWoorden, $aFilter);

echo '<pre>'.print_r($aFiltered, true).'</pre>';
?>
 
Afra ca

Afra ca

10/06/2009 14:19:00
Quote Anchor link
Prachtig, was array_diff vergeten. Mijn dank.
 
Joren de Wit

Joren de Wit

10/06/2009 14:22:00
Quote Anchor link
Afra schreef op 10.06.2009 14:19:
Prachtig, was array_diff vergeten. Mijn dank.
Het leuke is dat je op php.net een mooie lijst met array functies hebt waarvan er vaak wel eentje bruikbaar is.

Ik ken ze ook niet allemaal uit mijn hoofd, maar als je een bewerking op arrays uit wilt voeren, is dat de eerste plaats waar je zou moeten kijken.
 
W W

W W

10/06/2009 15:09:00
 
W W

W W

10/06/2009 15:10:00
Quote Anchor link
Pepijn schreef op 10.06.2009 15:09:


nvm linkje over t hoofd gezien.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.