我有一个二维数组$ 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'
}
感谢。
答案 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]
}
}
}