Функция для проверки последовательности ключей массива

eddie

Новичок
Re: Различить массив и хеш массив

Hi,

речь скорее всего идет об отличии простого массива от ассоциативного (associative array)

вот моя функция
PHP:
function isAssocArray($a)
{
	$i=0;
	foreach($a as $k=>$v)
		if($k!==$i++)return 1;
	return 0;
}
echo isAssocArray(Array(1,2,3,4,5));	// 0
echo isAssocArray(Array(1,2,3,4,'x'=>5)); // 1
 

Bocha

Guest
в РНР массив не различается ассоциативный или простой.
"An array in PHP is actually an ordered map" (c)
 

eddie

Новичок
bocha:
как это не различает, попробуй сделай цикл for по ассоциативному массиву -- только foreach

Demiurg:
возвращает 0 и это логично
 

Фанат

oncle terrible
Команда форума
Демиург, не так
$a[1]=1;
$a[3]=1;
echo isAssocArray($a);

На самом деле он просто не понимает разницу, которая и в правду, достаточно условна, и проверяет, просто, ровно то, что проверяет - не являются ли ключи целыми числами и не идут ли они по порядку.

Другое дело, что смысл этой проверки, остается покрыт мраком.
 

Фанат

oncle terrible
Команда форума
эдичка, спорим на ящик пива, что я с помощью for переберу самый, что ни на есть ассоциативный массив?
 

eddie

Новичок
смысл проверки в том, что как раз важно знать, могу я по массиву пройтись циклом for или нет

особенно при передаче его в jscript
 

eddie

Новичок
Фанат:
спорим, но тебе придется использовать
$массив[$переменная_цикла]
 

Demiurg

Guest
eddie, циклом for можно пройтись по чему угодно, хоть по все твоей родне до одинадцатого колена.
 

Фанат

oncle terrible
Команда форума
eddie
а при переборе "не ассоциативного" - не придется?
 

eddie

Новичок
а вы попробуйте сначало
PHP:
$a=Array(1,2,3,4,'x'=>5);
for($i=0;$i<count($a);$i++)echo $a[$i];
Notice: Undefined offset: 4 in ....

а в jscripte еще хуще -- там для таких массивов .length неопределено
 

Фанат

oncle terrible
Команда форума
Я плакал.
во-первых влез со своей функцией в тред, к которому она не имеет никакого отношения.
во-вторых, перебирать форичем массив ТОЛЬКО для того, чтобы узнать - можно ли его перебрать фором - это, блин, у меня просто нет слов.
 

Demiurg

Guest
eddie:
1. причем тут яваскрипт?
2. естественно, что у тебя вылезают нотайсы, когда ты не понемешь того, что ты джелаешь.
3. переношу весь этот бред в отдельный топик.
 

Bocha

Guest
Автор оригинала: eddie
bocha:
как это не различает, попробуй сделай цикл for по ассоциативному массиву -- только foreach
Здесь обсуждался вопрос представления массива, как набора данных. Если тебе нравиться массив с ключами типа int называть простым, а все остальные ассоциативным, то я не возражаю, но способ представления от этого не изменится, а именно просто пары key - value. Особого смысла в функции, которую ты показал я не вижу. Если я не знаю могу - ли я испоьловать for или foreach, то я просто буду всегда юзать foreach. Зачем для этого целую функцию использовать не совсем понятно.
 

eddie

Новичок
Автор оригинала: Фанат
Я плакал.
во-первых влез со своей функцией в тред, к которому она не имеет никакого отношения.
во-вторых, перебирать форичем массив ТОЛЬКО для того, чтобы узнать - можно ли его перебрать фором - это, блин, у меня просто нет слов.
у тебя не было такой задачи, и это еще не значит что у всех нету слов. А мне это было важно (почитаешь мои посты -- может поймешь)

все -- заканчиваю флейм

и не плачь

пиво выпить всегда рад
 

Фанат

oncle terrible
Команда форума
а с чего ты взял, что я с тобой собираюсь пивом делиться?
 

Фанат

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

списать
 

eddie

Новичок
1. покажи где хамство?
2. покажи где я путаю свои слова?
3. покажи чему я мог учиться на ваших постах?
4. ни кто же не поинтересовался, зачем мне нужна эта функция?
5. я тебе поставлю пиво если переберешь асс.массив циклом for
 

Фанат

oncle terrible
Команда форума
массив
$arr=array(
'a'=1,
'b'=2,
'c'=3
);
для тебя достаточно ассоциативный? удовлетворяет определению ассоциативного?
 
Сверху