Bonjour,
<u>Un SELECT sur ma bdd me retourne l'array suivant :</u>

array(
(int) 0 => array(
'PostUser' => array(
'post_id' => '21'
)
),
(int) 1 => array(
'PostUser' => array(
'post_id' => '20'
)
),
(int) 2 => array(
'PostUser' => array(
'post_id' => '19'
)
)
)

MA QUESTION : Je veux simplement tester si une valeur de la clé "post_id" est bien présente dans l'array.
Alors j'ai bien essayé avec la fonction php in_array, le problème est que mon tableau ne semble pas être sous la bonne forme. J'aimerai pouvoir le transformer comme suit :

array ('21', '20', '19')

si quelqu'un peut m'aider ce serait cool :)
Ou alors si quelqu'un a la solution pour faire fonctionner la fonction "in_array()" avec l'array d'origine(celui plus haut).

thanks.

3 réponses


BenFarhat
Réponse acceptée

Salut :)
la fonction in_array n'étant pas multidimensionnel, tu dois passer également par la récursivité

la fonction étant comme ci:

bool in_array ( mixed $needle , array $haystack , bool $strict = FALSE ] )

source
et l'exemple d'explication comme suit:

$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
    echo "Got Irix";
}

tu peux faire une fonction qui fera la recherche pour toi l’élément $recherche dans un tableau $tableau dans le champ $champ (donc ton cas c'est post_id)

public function dans_tableau($recherche,$tableau,$champ){
    foreach($tableau as $val){
        if($val$champ]==$recherche){
            return true;
        }
    }
    return false;
}

juste en remarque, pourquoi ne pas directement faire une requête sur ce post_id?
ou encore
Puisque via ta requete tu as des données (le tableau que tu as montré) que tu exploites (normalement) dans ton DOM, pourquoi ne pas passer par un peu de jQuery en mettant le post_id comme id d'un élement et en l'utilisant comme sélecteur (ou alors via un script du genre "autocomplete").
Sinon si tu n'utilises pas tous les éléments de ton select et seulement le post_id voulu alors tu devrais peut être changer ta requête SQL et y inclure dans ton where le post_id recherché.

JPH
Auteur
Réponse acceptée

Il semblerait que le find('list') sur cake me retourne un array à une dimension exploitable avec la fonction in-array();

Je ferme donc ce sujet et te remercie encore pour ta réponse tres complete et dans laquelle j'ai encore appris des choses ;)

Thanks BenFahrat ;)

JPH
Auteur

Réponse tres complete! Merci ;)

J'etudie les differentes possibilités que tu cites. La plus propre me parait evidemment d'avoir le resultat souhaité directement à la requête sans avoir à faire un traitement ulterieur.

Je suis sur Cake et ma requete est un find(all) sur ma table PostUser en précisant le champ souhaité, comme suit :

$user_id = $this->Auth->user('id');
        $this->loadModel('PostUser');
        $this->PostUser->recursive = -1 ;
        $d'marequete'] = $this->PostUser->find('all', array(
            'conditions' => array('PostUser.user_id' => $user_id),
            'fields' => array('PostUser.post_id'),
            'order' => array('PostUser.post_id DESC')
                ));

SI je fais un debug de $marequete

debug($d'marequete']); die();

j'obtiens l'array que j'ai montré dans mon premier post.

Precision > La requete en sql donne ceci :

SELECT `PostUser`.`post_id` FROM `mabasededonnees`.`posts_users` AS `PostUser` WHERE `PostUser`.`user_id` = 52 ORDER BY `PostUser`.`post_id` DESC

En français > je recherche tous les 'post-id' du 'user_id' :)

Si je pouvais obtenir directement de ma requête un array comme suit :
array ('21', '20', '19')

Alors ce serait formidable !
Peut-être avec un find('list') ... Je vais tester ...
Une idée sinon ? :)