如何知道数据在PHP中的数组

时间:2011-07-19 13:38:07

标签: php arrays

又是我了: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] => zad0xsis1array[0]还是array[1]? 我想过有一个值(例如0),如果PHP没有在那里找到那些数据,那么在下一个中添加1来查看该值,但是对于很多用户来说这可能会很慢

5 个答案:

答案 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名用户,这也是一次大致零时间的操作。计算机速度非常快,查看阵列的每个元素都很便宜。

您是否考虑过按名称对数组进行排序?使用kso​​rt按名称排序(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的主数组索引                ) )