Wenn das Array nicht zu groß ist und immer gleich Musterstruktur in seiner Elemente hat, können Sie es serialisiert werden konnte und es überprüfen mit Regex-Muster.
Vorteil: die Ausführung des Codes ist ziemlich schnell und es ist relativ sauber und intelligent. Nachteil: schwer zu schreiben das Regex-Muster, wenn das Array mehrdimensional ist und noch schlimmer, wenn die Werte des gleichen Elements von verschiedenen Typen sind. Sie müssen nach Änderungen suchen, die im Format der serialisierten Zeichenfolge in der Version einer neuen Version der Sprache vorgenommen wurden.
Sie können die folgenden Beispiele für verschiedene Arten von Arrays testen für jeden von ihnen ...
Beispiel 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';
}
Wenn Sie die Typen in dem obigen Beispiel kombinieren möchten Sie verwenden können, der folgende reguläre Ausdruck:
preg_match('/^a:\d+:{((i:\d+;)|(i:\d+;s:\d+:\"\w+\";))+}$/', serialize($arr_1))
Beispiel 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';
}
Beispiel 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.
Und was ist das Format, das Sie suchen? – codaddict
@codaddict die erste – Ryan
Ich denke, Sie müssen das Format ein wenig deutlicher angeben. Muss das Array beispielsweise genau zwei Zeichenfolgenschlüssel enthalten (Schlüssel, die nicht als Zahlen interpretiert werden können), die jeweils einen Zeichenfolgenwert enthalten sollen? – Mike