使用数组循环查找值的php数组循环
我有一个二维数组$array_userinfo,包含大约21000个元素。每个元素的第一个位置为“登录”,第二个位置为“电子邮件”。我需要做的是在这个数组中循环,从另一个$array_usermeetingfolder中找到任何匹配的“login”,这是一个包含大约700个元素的一维数组 以下是填充的两个阵列:使用数组循环查找值的php数组循环,php,arrays,loops,Php,Arrays,Loops,我有一个二维数组$array_userinfo,包含大约21000个元素。每个元素的第一个位置为“登录”,第二个位置为“电子邮件”。我需要做的是在这个数组中循环,从另一个$array_usermeetingfolder中找到任何匹配的“login”,这是一个包含大约700个元素的一维数组 以下是填充的两个阵列: foreach ($child->children() as $node_principalid) { array_userinfo[$i][0] = (string) $node
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'
}
for($k=0;$k
谢谢。一个可能的解决方案:
转换$array\u usermeetingfolder
,使您拥有一个数组,其中用户登录是键,值是任何东西。例如
$temp = array('joeblow' => 1,
'someoneelse' => 1,
...);
然后在循环中,您只需检查密钥是否存在:
if (isset($temp[$array_userinfo[$k][0]]) {
echo 'Hoozah!';
}
您还可以使用
array\u key\u exists()
代替isset。您必须运行一些效率更高的测试。如果可能,您应该使用登录名作为数组密钥,那么您可以快速访问密钥,我认为您不需要考虑性能。PHP中的数组是Hashmaps,如果知道密钥,则可以快速访问它,如果必须检查整个数组,则需要花费更长的时间。如果无法更改,则应考虑从阵列创建数据结构,以提高性能。不知道它是否值得,测量它:)
比如:
以下操作应该有效
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]
}
}
}
for($i=0;$i)最后需要什么?我会做一些类似于array_intersect(array_map(function($a){return$a['login']}),$array_usermeetingfolder)的事情;最后,如果在较小的数组中找到匹配项,则使用较大数组中的电子邮件传递给函数以向userOP发送电子邮件,而不是执行for($i=0;$i
我建议先计算计数,然后使用变量数组计数,这样会大大提高性能。@David Harris:稍后会这样做。谢谢。Michael,谢谢。通过如何“转换”$array\u usermeetingfolder?该数组正在另一个For循环中填充:$array\u usermeetingfolder[$j]=$endusersconame;$j++;哦,你跑得更快:-)是的,这样做!再次感谢。我想在这一点上,我可以简单地使用一个代码将工作!这将是一个偶尔使用的管理应用程序,它是循环中的电子邮件部分,可能会影响效率问题,如果出现。无论如何,这是什么代码?一个函数的一部分?什么是$checkback?“如何“转换”$array\u usermeetingfolder?">$checkback。我将您的$array\u userinfo转换为快速搜索数据结构。您可以对其执行任何操作。将其用作方法或函数。或在函数内部使用。我使用了您的命名法。不起作用。我将您的代码放在函数外部;即使在修复代码中的一些语法错误后,我也会收到一个错误:undef未定义索引登录,未定义索引电子邮件。很抱歉太密集了。邮件所在索引的名称是什么?0?和登录名?1我认为,因为您编写了“login”,这是您的arrayNo的键,我从未使用过键方法。我想这就是您的代码出现问题的原因:我使用了[$array\u userinfo[$I][1]=(字符串)$node_principalid->email;$i++];和[$array_usermeetingfolder[$j]=$endusersconame];//$j++;在两个不同的循环中。因此两个数组的值都是基于索引的。这是个坏主意,你在数组键上迭代n*m次。如果你在第一个数组中有21.000个元素,在另一个数组中有700个元素:21000*700=14.700.000如果你有701:14.721.000,是的,这正是发生的事情,正如Fabian所说的。
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]
}
}
}