Si le tableau est pas trop grand et a toujours la structure égale de modèle dans ses éléments, vous pourriez sérialiser et le vérifier avec motif regex. Avantage: l'exécution du code est assez rapide et relativement plus propre et intelligente. Inconvénient: difficile d'écrire le motif regex lorsque le tableau est multidimensionnel et pire, lorsque les valeurs d'un même élément sont de types différents. Vous devez surveiller les modifications apportées au format de la chaîne sérialisée dans la version d'une nouvelle version du langage (PHP -> serialize).
Vous pouvez tester les exemples suivants de différents types de tableaux pour chacun d'entre eux ...
Exemple 1:
$arr_1 = array(1,22,333,); //-> a:3:{i:0;i:1;i:1;i:22;i:2;i:333;}
// $arr_1 = array(1,22,'333',); //-> a:3:{i:0;i:1;i:1;i:22;i:2;s:3:"333";}
if (is_array($arr_1) &&
preg_match('/^a:\d+:{(i:\d+;)+}$/', serialize($arr_1))
) {
echo 'TRUE';
} else {
echo 'FALSE';
}
Si vous souhaitez combiner les types dans l'exemple ci-dessus, vous pouvez utiliser l'expression régulière suivante:
preg_match('/^a:\d+:{((i:\d+;)|(i:\d+;s:\d+:\"\w+\";))+}$/', serialize($arr_1))
Exemple 2:
$arr_2 = array('a', 'bb', 'ccccc',); //-> a:3:{i:0;s:1:"a";i:1;s:2:"bb";i:2;s:5:"ccccc";}
// $arr_2 = array('a', 'bb', 7,); //-> a:3:{i:0;s:1:"a";i:1;s:2:"bb";i:2;i:7;}
if (is_array($arr_2) &&
preg_match('/^a:\d+:{(i:\d+;s:\d+:\"\w+\";)+}$/', serialize($arr_2))
) {
echo 'TRUE';
} else {
echo 'FALSE';
}
Exemple 3:
$arr_3 = array(
array('name'=>'War and Peace', 'year'=>1865),
array('name'=>'Different Seasons', 'year'=>1982),
); // exit(serialize($arr_3));
// $arr_3 = array(
// array('name'=>'War and Peace', 'year'=>1865),
// array('name'=>'Different Seasons', 'year'=>'1982'),
//); // exit(serialize($arr_3));
if (is_array($arr_3) &&
preg_match('/^a:\d+:{(i:\d+;a:\d+:{s:\d+:\"name\";s:\d+:\"[\w+\s+]+\";s:\d+:\"year\";i:\d{4};})+}$/', serialize($arr_3))
) {
echo 'TRUE';
} else {
echo 'FALSE';
}
... etc.
Et quel est le format que vous cherchez? – codaddict
@codaddict le premier – Ryan
Je pense que vous devez spécifier le format un peu plus clairement. Par exemple, le tableau doit-il contenir exactement deux clés de chaîne (clés qui ne peuvent pas être interprétées comme des nombres), dont chacune doit contenir une valeur de chaîne? – Mike