filter array op strings
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:
Dus filteren en opnieuw ordenen
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
Gesponsorde koppelingen:
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:
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 :-).
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 :-).
Gewijzigd op 01/01/1970 01:00:00 door Karl Karl
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:
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.
Gewijzigd op 01/01/1970 01:00:00 door Karl Karl
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.
Gebruik dan bijvoorbeeld strpos() om te kijken of die delen in de entries van je array voorkomen.
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.
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
Zoiets dus?
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.



