0

我有一个二维数组 $array_userinfo 大约。21,000 个元素。每个元素在第一个位置都有“登录”,在第二个位置有“电子邮件”。我需要做的是遍历这个数组并从另一个 $array_usermeetingfolder 中找到任何匹配的“登录名”,这是一个大约为 1 的一维数组。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'
}

谢谢。

4

3 回答 3

1

一种可能的解决方案:

转换$array_usermeetingfolder所以你有一个数组,其中用户登录是键,值是任何东西。例如

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

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

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

您也可以使用array_key_exists()代替 isset。您将不得不运行一些更有效的测试。

于 2013-01-16T16:57:05.150 回答
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
于 2013-01-16T17:18:04.703 回答
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]
        }

    }



    }
于 2013-01-16T17:23:12.810 回答