$arr = array('machin', 'truc', 'bidule', 'machine');
$filter = new RegexIterator(new ArrayIterator($arr), '/mac/');
print_r(iterator_to_array($filter));
/*
Array
(
[0] => machin
[3] => machine
)
*/
Merci, je m'attendais à cette réponse avec RegexIterator mais malheureusement notre serveur n'est pas encore à jour en ce qui concerne PHP et ça ne sera pas fait avant l'année prochaine. Une autre solution ? J'ai regardé du côté de preg_grep mais ça coince...tu peux faire ca avec RegexpIterator
EDIT : si tu veux un exemple
$arr = array('machin', 'truc', 'bidule', 'machine'); $filter = new RegexIterator(new ArrayIterator($arr), '/mac/'); print_r(iterator_to_array($filter)); /* Array ( [0] => machin [3] => machine ) */
$arr = array('machin', 'truc', 'bidule', 'machine');
foreach($arr as $key => $val)
{
if(!preg_match('/mac/', $val))
{
unset($arr[$key]);
}
}
print_r($arr);
/*
Array
(
[0] => machin
[3] => machine
)
*/
comment tu créer ton array pour récupérer les fichiers ? parce que peu etre qu'a se moment la tu peux faire un glob, sinon le RegexpIterator reviens a faire :
$arr = array('machin', 'truc', 'bidule', 'machine'); foreach($arr as $key => $val) { if(!preg_match('/mac/', $val)) { unset($arr[$key]); } } print_r($arr); /* Array ( [0] => machin [3] => machine ) */
$tab1 = array("toto_123456.txt","titi_123456.txt","tata_2456.txt","tata_2456.txt");
$tab2 = array("123456","2456"); // C'est volontaire les valeurs, dans le script que je dois faire, je n'aurais qu'une partie du nom du fichier
// Vérifier que les valeurs de $tab2 soient présente dans $tab1 (une partie des valeurs).
// Si oui, extraire les valeurs de tab1
Et franchement je coince, ça à l'air tout con, j'ai beau lire le manuel sur les arrays, je n'arrive pas à faire cette moulinette. Je faire une pause, je dois avoir trop le nez dedans !
$tab1 = array('toto_123457.txt','titi_123456.txt','tata_2457.txt','tata_2456.txt');
$tab2 = array('123456','2456');
$reg = '/_(?:' . implode('|', array_map('preg_quote', $tab2)) . ')\.txt$/';
foreach($tab1 as $key => $val)
{
if(!preg_match($reg, $val))
{
unset($tab1[$key]);
}
}
print_r($tab1);
/*
Array
(
[1] => titi_123456.txt
[3] => tata_2456.txt
)
*/
C'est parfait, merci pour tout !tout est dans le regex (j'ai mis des valeur qui correspondent pas, pour mieux voir)
$tab1 = array('toto_123457.txt','titi_123456.txt','tata_2457.txt','tata_2456.txt'); $tab2 = array('123456','2456'); $reg = '/_(?:' . implode('|', array_map('preg_quote', $tab2)) . ')\.txt$/'; foreach($tab1 as $key => $val) { if(!preg_match($reg, $val)) { unset($tab1[$key]); } } print_r($tab1); /* Array ( [1] => titi_123456.txt [3] => tata_2456.txt ) */
$reg = '/_(?:' . implode('|', array_map('preg_quote', $tab2)) . ')\.txt$/';
<?php
$tab1 = array('toto_123457.txt','titi_123456.txt','tata_2457.txt','tata_2456.txt');
$tab2 = array('123456','2456');
$results = array();
// parcours des données
foreach($tab1 as $key => $val)
{
// parcours des mots-clés
foreach($tab2 as $search)
{
// stockage des résultats positifs
if(strpos($val,$search)!==false)
{
$results[$key] = $val;
}
}
}
print_r($results);
/*
Array
(
[1] => titi_123456.txt
[3] => tata_2456.txt
)
*/
Il y a une boucle de plus, mais je pense malgré tout que c'est moins gourmand qu'une expression régulière...
Je vois pas le problème à sélectionner toutes les entrées contenants les mots-clés recherchésComment rechercher une partie du nom du fichier dans le tableau ?
la partie c'est 123456 dans toto_123457.txtD'après les dire du monsieur:Je vois pas le problème à sélectionner toutes les entrées contenants les mots-clés recherchésComment rechercher une partie du nom du fichier dans le tableau ?
$tab1 = array('toto_123457.txt','titi_123456.txt','tata_2457.txt','tata_2456.txt');
$tab2 = array('123456','2456');
$reg = '/_(?:' . implode('|', array_map('preg_quote', $tab2)) . ')\.txt$/';
$out = preg_grep($reg, $tab1);
print_r($out)