Zend_Validate_InArray 提供開箱即用的「值是否存在於陣列」驗證,適用於下拉選單、權限代碼、狀態碼等白名單場景。本文展示完整使用範例與進階選項。
<?php
require_once("Zend/Loader.php");
Zend_Loader::loadClass("Zend_Validate");
Zend_Loader::loadClass("Zend_Validate_InArray");
function check_inarray($person) {
$allowed = ['張三', '李四', '王五', '趙六', '田七'];
$validator = new Zend_Validate_InArray($allowed);
if ($validator->isValid($person)) {
echo "有這個人!";
} else {
echo "沒這個人!";
}
}
check_inarray('張三'); // 輸出:有這個人!
check_inarray('路人甲'); // 輸出:沒這個人!
new Zend_Validate_InArray(
array $haystack, // 白名單陣列(必填)
bool $strict = false, // 嚴格模式:true 時型別也必須相同
int $recursive = 0 // 遞歸深度:>0 時檢查多維陣列
);
<?php
// 嚴格模式:'123' (string) 不等於 123 (int)
$strictValidator = new Zend_Validate_InArray([1, 2, 3], true);
var_dump($strictValidator->isValid('1')); // false
var_dump($strictValidator->isValid(1)); // true
// 多維陣列遞歸檢查
$multi = [
'fruits' => ['apple', 'banana'],
'colors' => ['red', 'blue']
];
$recursiveValidator = new Zend_Validate_InArray($multi, false, 1);
var_dump($recursiveValidator->isValid('apple')); // true
var_dump($recursiveValidator->isValid('green')); // false
array_flip 後用 isset() 判斷,或改用 Zend_Validate_Callback 自定義高效邏輯。Zend_Validate_InArray 以極簡介面封裝了常見的白名單邏輯,配合嚴格模式與遞歸檢查,覆蓋 90% 以上的成員資格驗證需求。