2

値が配列内にあるかどうかを確認する必要があり、そのためにphp関数in_array()を使用しています。in_array()関数に送信する配列がサブ配列で構成されている場合は機能しないことに気付きました。サブアレイに対してこの検証を行う方法はありますか?あなたが私の問題を理解するのを助けるために、私は次のコードを持っています:

$userIds = array();
foreach($accounts as $account){
    $accounIds[] = $account->getId();
    $userIds[] = AccountUserBeanHome::findAllIdsByAccountId($account->getId());
}
$userId = 225;
if (in_array($userId, $userIds, true)) {
    do action...
}

問題は、配列$userIdsが次のようになる可能性があることです。

Array
(
[0] => Array
    (
        [0] => 225
        [1] => 226
        [2] => 227
        [3] => 228
        [4] => 229
        [5] => 230
        [6] => 340
        [7] => 355
    )

[1] => Array
    (
        [0] => 313
        [1] => 314
        [2] => 315
        [3] => 316
        [4] => 318
        [5] => 319
    )

[2] => Array
    (
        [0] => 298
        [1] => 301
        [2] => 302
        [3] => 338
    )

)

サブ配列をチェックするのにうまくいかないことに気づいたin_array()ので、この検証を行うためにあなたの助けをお願いします...多分すべてのサブ配列要素をメイン配列のすべての要素にする方法...まあ..私はあなたができることを願っています助けて。

4

3 に答える 3

12

必要なのは、再帰的な in_array です。幸いなことに、多くの人がすでにこれを作っています。

これは PHP マニュアルのコメント セクションから直接引用したものです: http://www.php.net/manual/en/function.in-array.php#84602

<?php 
function in_array_recursive($needle, $haystack) { 
    $it = new RecursiveIteratorIterator(new RecursiveArrayIterator($haystack)); 
    foreach($it AS $element) { 
        if($element == $needle) { 
            return true; 
        } 
    } 
    return false; 
} 
?>
于 2012-07-23T08:59:39.540 に答える
2
$iterator = new RecursiveIteratorIterator(
                new RecursiveArrayIterator($userIds), 
                RecursiveIteratorIterator::SELF_FIRST);

foreach($iterator as $key => $val) {
    if($val == $userId) {
        // do something
    }
}

recursiveiteratoriteratorに関するドキュメント。

工藤からゴードンへ

于 2012-07-23T09:01:04.577 に答える
1

$userIds次を使用して配列をフラット化できますarray_merge()

$userIds[] = array();
foreach($accounts as $account){
    $accounIds[] = $account->getId();
    $userIds = array_merge($userIds, AccountUserBeanHome::findAllIdsByAccountId($account->getId()));
}

次に、を呼び出しin_array()てIDを確認します。

于 2012-07-23T09:02:34.670 に答える