проблема in_array - PullRequest
       3

проблема in_array

3 голосов
/ 01 апреля 2011

У меня есть пара больших массивов с номерами, каждый из которых имеет 5 000 - 10 000 значений.

Все простые массивы, такие как

$array = array(125,345345,345,3485,324,65,746647,3221, ... );

Я пытаюсь найти их по некоторому номеру и повторять эту операцию почти 1000 раз для разных номеров.

Как

if $array has item 345 {
    return true
} else {
    return false
}

Но выполнение запроса занимает много времени. Иногда сервер выдает ошибку тайм-аута.

Каков наилучший способ поиска некоторых чисел в простых по структуре, но больших по размеру массивах?

Ответы [ 3 ]

8 голосов
/ 01 апреля 2011

Самое простое - перевернуть массив (см. array_flip) и использовать isset($array[$key]).При этом вместо поиска используется поиск по хешу, поэтому он намного быстрее.

Кроме этого, попробуйте использовать базу данных или какой-нибудь более оптимальный способ работы с большими наборами данных.

2 голосов
/ 01 апреля 2011

Это скорее проблема информатики, чем проблемы PHP. Я бы порекомендовал заглянуть в «бинарный поиск» или «бинарные деревья». Если вы загляните в Google, вы можете даже найти существующую реализацию.

2 голосов
/ 01 апреля 2011
if (in_array(345, $array)) {
    return true;
} else {
    return false;
}

не видел, что вы хотели сделать это 1000 раз за номер. использовать базу данных.

Используйте БД, как это:

$result = mysql_query("SELECT * WHERE number={$number}", $link);
$x = (mysql_num_rows($result) > 0  ? mysql_num_rows($result) : false );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...