filter array op strings
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)
1
2
3
4
5
2
3
4
5
<?php
$testarray = array("iets.txt","nogiets.png","test.txt","weereen.txt","test2.txt");
?>
$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
Als alleen de txt's d'r uit kunnen dan kan je dit doen:
Code (php)
1
2
3
4
5
6
7
8
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);
?>
$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 :-).
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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";
?>
//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
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.
Gebruik dan bijvoorbeeld strpos() om te kijken of die delen in de entries van je array voorkomen.
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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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>';
?>
$aWoorden = array(
'foo',
'bar',
'foobar',
'barfoo'
);
$aFilter = array(
'foobar',
'bar'
);
$aFiltered = array_diff($aWoorden, $aFilter);
echo '<pre>'.print_r($aFiltered, true).'</pre>';
?>
Prachtig, was array_diff vergeten. Mijn dank.
Afra schreef op 10.06.2009 14:19:
Het leuke is dat je op php.net een mooie lijst met array functies hebt waarvan er vaak wel eentje bruikbaar is. Prachtig, was array_diff vergeten. Mijn dank.
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.
http://nl.php.net/manual/en/ref.array.php << daar dus
Pepijn schreef op 10.06.2009 15:09:
http://nl.php.net/manual/en/ref.array.php << daar dus
nvm linkje over t hoofd gezien.