2010-01-25 5 views
0

Une chaîne provenant de ma table de base de données indique $ needle. Si l'aiguille n'est pas dans ma matrice, je veux l'ajouter à ma matrice.PHP: Comment vérifier le contenu d'un tableau pour ma chaîne?

Si elle est dans mon tableau, alors tant qu'il est seulement deux fois, alors je reste veux ajouter à mon tableau (donc trois fois sera le maximum)

Afin de vérifier Si $ needle est dans mon tableau $ haystack, dois-je faire une boucle sur le tableau avec strpos() ou y at-il une méthode plus rapide?

Il y a beaucoup d'aiguilles dans la table, donc je commence par boucler le résultat de sélection.

Ceci est le schéma de ce que je suis en train de faire ...

$haystack = array(); 

    while($row = mysql_fetch_assoc($result)) { 
    $needle = $row['data']; 

    $num = no. of times $needle is in $haystack // $haystack is an array 

    if ($num < 3) { 
     $$haystack[] = $needle; // hopfully this adds the needle 
     } 

    } // end while. Get next needle. 

Est-ce que quelqu'un sait comment dois-je faire ce bit:

$ num = no. de temps $ aiguille est en botte de foin $

grâce

Répondre

1

Vouliez-vous dire array_count_values() revenir les occurrences de toutes les valeurs uniques?

<?php 
$a=array("Cat","Dog","Horse","Dog"); 
print_r(array_count_values($a)); 
?> 

La sortie du code ci-dessus sera:

Array ( 
[Cat] => 1, 
[Dog] => 2, 
[Horse] => 1 
) 
1

Vous pouvez utiliser array_count_values() d'abord générer une carte contenant la fréquence pour chaque valeur, puis augmente que la valeur si le nombre de valeur la carte était < 3, par exemple:

$original_values_count = array_count_values($values); 

foreach ($values as $value) 
    if ($original_values_count[$value] < 3) 
     $values[] = $value; 

Comme ne peut pas être complètement évité looping, je dirais que c'est une bonne idée d'opter pour l'utilisation d'un functio PHP natif n en termes de vitesse, par rapport à la boucle de toutes les valeurs manuellement.

0

Il existe également une fonction array_map(), qui applique une fonction donnée à chaque élément de la matrice.

0

Peut-être quelque chose comme ce qui suit? Changer un peu le code de Miek.

$haystack_count = array_count_values($haystack); 
if ($haystack_count[$needle] < 3) 
    $haystack[] = $needle; 
Questions connexes