Как проверить, является ли массив PHP ассоциативным или последовательным? - PullRequest
724 голосов
/ 06 октября 2008

PHP обрабатывает все массивы как ассоциативные, поэтому встроенных функций нет. Кто-нибудь может порекомендовать довольно эффективный способ проверить, содержит ли массив только цифровые ключи?

В принципе, я хочу иметь возможность различать это:

$sequentialArray = array('apple', 'orange', 'tomato', 'carrot');

и это:

$assocArray = array('fruit1' => 'apple', 
                    'fruit2' => 'orange', 
                    'veg1' => 'tomato', 
                    'veg2' => 'carrot');

Ответы [ 51 ]

0 голосов
/ 06 октября 2008

Если в PHP нет встроенной функции, вы не сможете сделать это менее чем за O (n) - перечисление всех ключей и проверка целочисленного типа. На самом деле, вы также хотите убедиться, что дыр нет, поэтому ваш алгоритм может выглядеть так:

for i in 0 to len(your_array):
    if not defined(your-array[i]):
        # this is not an array array, it's an associative array :)

Но зачем? Просто предположите, что массив того типа, который вы ожидаете. Если это не так, он просто взорвется вам в лицо - это динамическое программирование для вас! Протестируй свой код и все будет хорошо ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...