|
|
|
| Сабж... например:
array(ноль, '1', 'пять', 'десять', 'четырнадцать', 58, 36); /* и */ array(0 => 'ноль', 1=>'1', 5 => 'пять', 10 => 'десять', 14 => 'четырнадцать', 58 => 58, 36 => 36);
|
| |
|
|
|
|
|
|
|
для: Emm
(08.04.2011 в 05:54)
| | В РНР нет чёткого разделения между индексированным и ассоциативным массивом. Можно сказать что все массивы являются ассоциативными.
Если принять за "простой" массив тот, у которого ключи всех элементов упорядочены и непрерывно возрастают от нуля, то можно отталкиваться от этого скрипта:
<?php
$a1 = array('ноль', '1', 'пять', 'десять', 'четырнадцать', 58, 36);
$a2 = array(0 => 'ноль', 1=>'1', 5 => 'пять', 10 => 'десять', 14 => 'четырнадцать', 58 => 58, 36 => 36);
$i = 0;
$is_simple = true;
foreach ( $a2 as $k => $v ) {
if ( $k !== $i++ ) {
$is_simple = false;
break;
}
}
if ( $is_simple ) {
print 'Массив простой';
} else {
print 'Массив ассоциативный';
}
|
100% гарантию может дать класс, внутри которого происходит контроль "простоты" массива. | |
|
|
|
|
|
|
|
для: Emm
(08.04.2011 в 05:54)
| |
<?ПэХэПэ
function isNumericArray($array) {
$keys = array_keys($array);
foreach ($keys as $key) {
if (!is_int($key)) {
return false;
}
}
return true;
}
function isAssociativeArray($array) {
$keys = array_keys($array);
foreach ($keys as $key) {
if (!is_string($key)) {
return false;
}
}
return true;
}
|
| |
|
|
|
|
|
|
|
для: Emm
(08.04.2011 в 05:54)
| | А лично меня интересует та задача в ходе решения которой возник данный вопрос.
Если не секрет, что за задача такая, зачем нужно 100%-но различить простой массив от ассоциативного? | |
|
|
|
|
|
|
|
для: Valick
(08.04.2011 в 12:47)
| | У меня на основе многомерного массива формируется форма настроек, так вот, для формирования селекта и т.п., значение и название возможных вариантов настроек иногда не совпадает, для наглядности и простоты перебора - ключ и элемент массива соответствует значению и названию опции селекта, но не всегда есть необходимость указывать различное название от значения опции, и соответственно не нужно дублировать ключи массивов, незачем, вот тут я задумался как логически это разделить, в начале я просто проверял есть ли в массиве нулевой индекс, т.к. в простом массиве он всегда есть, а в ассоциативном небыло необходимости указывать, все было норм, но тут я совсем забыл что там тоже нужен ноль (именно число ноль, строка не канает ибо везде идет проверка на ноль, много переписывать), и как не крути ноль и в африке ноль, как тут проверять? | |
|
|
|
|
|
|
|
для: Emm
(08.04.2011 в 05:54)
| | есть еще такой подход:
<?php
function is_assoc(array $array)
{
$keys = array_keys($array);
return array_keys($keys) !== $keys;
}
|
хотя и не совсем универсальный | |
|
|
|