2012-08-13 5 views
1

je suis arrivé ce tableau dans PHP:Faire un autre tableau d'un tableau

$arr =('1-1.jpg','1-2.jpg','11-3.jpg', '1-4.jpg', '3-5.jpg', '41-5.jpg','1-3.jpg','4-5.jpg','14-5.jpg','54-5.jpg','64-5.jpg','14-5.jpg', '1-5.jpg'); 

je besoin de ce tableau, mais j'ai la version PHP 5.27 sur le serveur :(

$newarray=('1-1.jpg','1-2.jpg','1-3.jpg', '1-4.jpg', '1-5.jpg'); 

Oubliez la version du serveur , le critère est « 1- » Comment puis-je obtenir tous les éléments qui commence seulement « 1 »

+2

Il est pas évident de réduire le grand tableau à la petite. Quels sont les critères? PS: "mais j'ai PHP version 5.27 sur le serveur :(" --- quelque chose de particulièrement faux avec 5.2.7? – zerkms

+0

@zerkms Il est évident pour moi. (Je pense que le 5.2.7 n'a pas '[...] ', vous devez utiliser' array (...) '.) –

+0

Comme zerkms, vous devez nous donner beaucoup plus d'informations que vous nous avez donné – David

Répondre

5

Utilisez ce code:.?

<?php 
$arr = array('1-1.jpg','1-2.jpg','11-3.jpg', '1-4.jpg', '3-5.jpg', '41-5.jpg','1-3.jpg','4-5.jpg','14-5.jpg','54-5.jpg','64-5.jpg','14-5.jpg', '1-5.jpg'); 
$newarray = array(); 
foreach($arr as $item) { 
    if(substr($item, 0, 2) == '1-') $newarray[] = $item; 
} 
sort($newarray); // Add this to sort the array 
?> 

Vous pouvez utiliser la fonction sort après le foreach pour trier la matrice.

+1

Ce n'est pas tous les jours que les deux premières réponses ont exactement la même technique :) – David

+0

@David - Non, c'est pas t ... –

+0

"exactement la même technique" - qu'est-ce que c'est incroyable d'utiliser 'substr' pour obtenir la sous-chaîne? Les mêmes réponses se produisent beaucoup tous les jours (pour des questions aussi triviales) – zerkms

1
<?php 
$new_array = array(); 
foreach ($old_array as $line) { 
    if (substr($line, 0, 2) == "1-") { 
     $new_array[] = $line; 
    } 
} 
?> 

Ceci vérifie si les deux premiers caractères de chaque élément sont 1- et, si c'est le cas, l'ajoute au nouveau tableau.

+0

Je vous ai battu :-) –

+0

Bien joué. :) – David

+0

Après cela j'ai eu ce tableau ([0] => 2-1.jpg [1] => 3-1.jpg [2] => 4-1.jpg [3] => 5-1.jpg [4] => 6-1.jpg) –

1

Utilisez preg_grep

$arr = array('1-1.jpg','1-2.jpg','11-3.jpg', '1-4.jpg', '3-5.jpg', '41-5.jpg','1-3.jpg','4-5.jpg','14-5.jpg','54-5.jpg','64-5.jpg','14-5.jpg', '1-5.jpg'); 

print_r(preg_grep('#^1-#', $arr)); 

Démo: http://codepad.org/ipDmYEBI

+0

J'essaie d'apprendre la regex mais je n'arrive pas à comprendre à quoi servent les symboles '# '. Est-ce que 'preg_grep ('/^1- /', $ arr)' ne fonctionnerait pas, sans les hashtags? Merci! Cela semble beaucoup plus agréable que de le faire par sous-chaîne. –

+0

@AlexKalicki, en PHP (et peut-être aussi Perl) la façon dont vous spécifiez le modèle regex, vous utilisez [délimiteurs de modèle] (http://php.net/manual/fr/regexp.reference.delimiters.php) pour séparer le pattern à partir des drapeaux d'option de motif.En général, les ressources qui enseignent regex ne parlent pas beaucoup à ce sujet car ce n'est pas commun à toutes les implémentations regex dans divers langages de programmation. Mais oui, ça fonctionnerait correctement en utilisant '/' au lieu de '#', mais j'utilise '# 'par habitude parce que'/'se produit souvent comme un caractère littéral dans le motif, et ensuite vous devez y échapper avec un antislash .... et puis c'est moche à lire. – goat

+0

Ah, j'ai compris. Je connaissais l'utilisation de délimiteurs de modèles en PHP, mais je ne savais pas qu'il y avait plus d'options pour ce que vous utilisez que juste des barres obliques. :) –

1

Une autre façon serait d'utiliser la méthode array_filter de PHP:

$arr = array('1-1.jpg','1-2.jpg','11-3.jpg', '1-4.jpg', '3-5.jpg', '41-5.jpg','1-3.jpg','4-5.jpg','14-5.jpg','54-5.jpg','64-5.jpg','14-5.jpg', '1-5.jpg'); 
$newArr = array_filter($arr, "filterArray"); // stores the filtered array 

function filterArray($value){ 
    return (substr($value, 0, 2) == "1-"); 
} 
+0

J'étais sur le point de poster une autre réponse avec ceci :-) –

Questions connexes