php数组循环用数组循环来查找值

时间:2013-01-16 16:43:32

标签: php arrays loops

我有一个二维数组$ array_userinfo with about。 21,000个元素。每个元素在第一个位置都有“登录”,在第二个位置有“电子邮件”。我需要做的是循环遍历这个数组,并从另一个$ array_usermeeting文件夹中找到任何匹配的“登录”,这是一个带有大约的一维数组。 700个元素。

以下是填充的两个数组:

foreach ($child->children() as $node_principalid) {
array_userinfo[$i][0] = (string) $node_principalid->login;
$array_userinfo[$i][1] = (string) $node_principalid->email;
i++;                            
}

foreach (.......) {
$endusersconame =  (string) $usermeetingsfoldersco->children()->name;       
$array_usermeetingfolder[$j] = $endusersconame;//
 $j++;
}

最好/最有效的方式是什么?我有一个这样的循环:

for ($k=0;$k < count($array_userinfo);$k++) {
//tempecho($array_userinfo[$k][0]);//will yield login, such as, 'joeblow'
}

感谢。

3 个答案:

答案 0 :(得分:1)

一种可能的解决方案:

转换$array_usermeetingfolder所以yuo有一个数组,其中用户登录是键,值是任何值。 E.g。

$temp = array('joeblow' => 1,
      'someoneelse' => 1,
      ...);

然后在循环中你可以检查密钥是否存在:

if (isset($temp[$array_userinfo[$k][0]]) {
    echo 'Hoozah!';
}

您也可以使用array_key_exists()代替isset。你必须运行一些更有效的测试。

答案 1 :(得分:1)

如果有可能你应该使用登录作为数组键,那么你可以快速访问密钥,我认为你不需要考虑性能。 PHP中的数组是Hashmaps,如果你知道密钥,你可以快速访问它,如果你必须检查整个数组,它需要更长的时间。如果您无法更改它,您应该考虑从阵列创建数据结构以提高性能。不知道它的价值,测量它:)

像:

<?php
foreach($array_userinfo as $info) {
    $checkAgainst[$info[0]] = $info[1];
}

foreach($array_usermeetingfolder as $mail) {
    if(isset($checkAgainst[$mail]) {
        $return[$mail] = $checkAgainst[$mail];
    }
}

// use $return

答案 2 :(得分:0)

以下情况应该有效。

for($i=0;$i <= count($firstarray);$i++)
    {
    for ($j=0;$j <= count($secondarray);$j++)
    {
        while($firstarray[$i][0] == $secondarray[$j])
        {
            echo $firstarray[$i][0]; // or $secondarray[$j]
        }

    }



    }