105 votes

Comment vérifier si plusieurs clés de tableau existent

J'ai une variété de tableaux qui vont contenir soit

story & message

ou simplement

story

Comment vérifier qu'un tableau contient à la fois une histoire et un message ? array_key_exists() ne recherche que cette seule clé dans le tableau.

Y a-t-il un moyen de le faire ?

0voto

quocvuongdn Points 6
<?php

function check_keys_exists($keys_str = "", $arr = array()){
    $return = false;
    if($keys_str != "" and !empty($arr)){
        $keys = explode(',', $keys_str);
        if(!empty($keys)){
            foreach($keys as $key){
                $return = array_key_exists($key, $arr);
                if($return == false){
                    break;
                }
            }
        }
    }
    return $return;
}

//exécuter la démo

$key = 'a,b,c';
$array = array('a'=>'aaaa','b'=>'ccc','c'=>'eeeee');

var_dump( check_keys_exists($key, $array));

0voto

Code Lover Points 1139

Je ne sais pas si c'est une mauvaise idée, mais j'utilise une boucle foreach très simple pour vérifier plusieurs clés de tableaux.

// get post attachment source url
$image     = wp_get_attachment_image_src(get_post_thumbnail_id($post_id), 'single-post-thumbnail');
// read exif data
$tech_info = exif_read_data($image[0]);

// set require keys
$keys = array('Make', 'Model');

// run loop to add post metas foreach key
foreach ($keys as $key => $value)
{
    if (array_key_exists($value, $tech_info))
    {
        // add/update post meta
        update_post_meta($post_id, MPC_PREFIX . $value, $tech_info[$value]);
    }
}

0voto

Andrew Luca Points 1168
$myArray = array('key1' => '', 'key2' => '');
$keys = array('key1', 'key2', 'key3');
$keyExists = count(array_intersect($keys, array_keys($myArray)));

renverra vrai, car il y a des clés du tableau $keys dans $myArray

0voto

Quelque chose comme ceci pourrait être utilisé

//Say given this array
$array_in_use2 = ['hay' => 'come', 'message' => 'no', 'story' => 'yes'];
//This gives either true or false if story and message is there
count(array_intersect(['story', 'message'], array_keys($array_in_use2))) === 2;

Notez la vérification contre 2, si les valeurs que vous voulez rechercher sont différentes vous pouvez changer.

Cette solution n'est peut-être pas efficace, mais elle fonctionne !

Mises à jour

Dans un graisse fonction :

 /**
 * Like php array_key_exists, this instead search if (one or more) keys exists in the array
 * @param array $needles - keys to look for in the array
 * @param array $haystack - the <b>Associative</b> array to search
 * @param bool $all - [Optional] if false then checks if some keys are found
 * @return bool true if the needles are found else false. <br>
 * Note: if hastack is multidimentional only the first layer is checked<br>,
 * the needles should <b>not be<b> an associative array else it returns false<br>
 * The array to search must be associative array too else false may be returned
 */
function array_keys_exists($needles, $haystack, $all = true)
{
    $size = count($needles);
    if($all) return count(array_intersect($needles, array_keys($haystack))) === $size;
    return !empty(array_intersect($needles, array_keys($haystack)));

}

Donc par exemple avec ceci :

$array_in_use2 = ['hay' => 'come', 'message' => 'no', 'story' => 'yes'];
//One of them exists --> true
$one_or_more_exists = array_keys_exists(['story', 'message'], $array_in_use2, false);
//all of them exists --> true
$all_exists = array_keys_exists(['story', 'message'], $array_in_use2);

J'espère que cela vous aidera :)

0voto

jerryurenaa Points 11

J'utilise habituellement une fonction pour valider mon message et c'est une réponse à cette question aussi, alors laissez-moi la poster.

pour appeler ma fonction je vais utiliser le tableau 2 comme ceci

validatePost(['username', 'password', 'any other field'], $_POST))

alors ma fonction ressemblera à ceci

 function validatePost($requiredFields, $post)
    {
        $validation = [];

        foreach($requiredFields as $required => $key)
        {
            if(!array_key_exists($key, $post))
            {
                $validation['required'][] = $key;
            }
        }

        return $validation;
    }

cela donnera le résultat suivant

"requis" : [ "username", "mot de passe", "tout autre champ" ]

Cette fonction permet de valider et de renvoyer tous les champs manquants de la requête post.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X