又是我了:P我有一个阵列:
Array
(
[0] => Array
(
[0] => zad0xsis
[name] => zad0xsis
[1] => http://es.gravatar.com/userimage/17503042/86ae3c2e40e7b5cdde3935c57e2da86b.jpg?size=100
[avatar] => http://es.gravatar.com/userimage/17503042/86ae3c2e40e7b5cdde3935c57e2da86b.jpg?size=100
[2] => f4a42dce15cebcead096b65191a206eb
[password] => f4a42dce15cebcead096b65191a206eb
)
[1] => Array
(
[0] => zad0xsis1
[name] => zad0xsis1
[1] => http://es.gravatar.com/userimage/17503042/86ae3c2e40e7b5cdde3935c57e2da86b.jpg?size=1100
[avatar] => http://es.gravatar.com/userimage/17503042/86ae3c2e40e7b5cdde3935c57e2da86b.jpg?size=1100
[2] => f4a42dce15cebcead096b65191a206eb
[password] => f4a42dce15cebcead096b65191a206eb
)
)
现在,我怎么知道[name] => zad0xsis1
是array[0]
还是array[1]
?
我想过有一个值(例如0),如果PHP没有在那里找到那些数据,那么在下一个中添加1来查看该值,但是对于很多用户来说这可能会很慢
答案 0 :(得分:5)
function findIndexByName ($array, $name) {
foreach ($array as $index => $entry)
if ($entry['name'] === $name) return $index;
return null; // or "false", or "-1", or whatever
}
答案 1 :(得分:1)
如果您有大量数据,则应将其放在数据库中,而不是将其全部保存在内存中。这样,您可以轻松地使用SELECT语句来检索信息。
如果你必须将它放在这样的数组中:
如果数据按您要查找的密钥排序,则可以二进制搜索信息。
如果没有,除了
之外你无能为力foreach ($list as $key => $value) {
if (...) {
$found = $key;
break;
}
}
答案 2 :(得分:0)
如果不保存任何其他数据,它不能比检查数组的每个元素慢。 但是,例如,按名称排序的用户可以更快地完成
答案 3 :(得分:0)
单独使用数组,除了查看数组[0],然后是数组[1],一直到数组[length]以找到你想要的名字,你不能做得更好。数组是线性数据结构。
信不信由你,即使有10,000名用户,这也是一次大致零时间的操作。计算机速度非常快,查看阵列的每个元素都很便宜。
您是否考虑过按名称对数组进行排序?使用ksort按名称排序(http://php.net/manual/en/function.ksort.php),然后使用二进制搜索(这在PHP中默认不实现,但有很多好的代码可用(参见http://php.net/manual/en/function.array-search.php并搜索'二分搜索')二进制搜索比线性搜索快得多,因为它使用的事实是数组被排序并跳转而不是检查每一个。
然而,与仅仅线性搜索数组相比,每次添加用户之后的排序实际上并不昂贵。正确添加用户以使数组保持排序,或者只是使用您在问题中描述的线性搜索。
答案 4 :(得分:0)
如果名称将是唯一的,为什么不在名称上索引数组 例如 排列 ( [zad0xsis] =>排列 ( [0] => zad0xsis [name] => zad0xsis )
[zad0xsis1] => Array
(
[0] => zad0xsis1
[name] => zad0xsis1
)
)
或者创建另一个存储索引的数组,例如 阵列( [zad0xsis1] =>阵列( [0] => 1 //名为zad0xsis1的主数组索引 ) )