無名関数内に static フラグを入れることができます。
array_walk($ary, function($item) {
static $done = false;
if($done) {
return;
}
// … your code
if($myBreakCondition) {
$done = true;
return;
}
});
これは実際には反復を停止しませんが、フラグが設定された後のすべてのサイクルは単に何もしません。あまり効率的ではありませんが、反復される配列が大きすぎなければ、パフォーマンスに大きな影響を与えずに機能する可能性があります。
あなたの場合、コードは次のようになります。
$valid = true;
array_walk($parent, function($value) use(&$valid) {
static $done = false;
if($done) {
return;
}
if(!is_numeric($value)) {
$valid = false;
$done = true;
return;
}
});
return $valid ? 'Valid' : 'Invalid';
しかし、実際には「切れ目」がまったくなかったとしても大した違いはありません。すべての無効な値には「false」のみが割り当てられますが、結果は依然として false であるため問題ありません。私の静的変数チートの方が効率的かもしれません。
個人的にあなたの場合、array_filter代わりに使用します:
$valid = count(array_filter($parent, 'is_numeric')) == count($parent);
あるいは単に
$valid = array_filter($parent, 'is_numeric')) == $parent;
配列内のすべての値$parentが数値である場合、それらはすべてフィルタリング後に存在します。一方、配列内の数値以外の値は、フィルター処理された配列の内容に影響を与え (項目数を減らし)、比較は false になります。