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

eddie

Новичок
Фанат:
да

Demiurg:
что each?

речь идет о $массив[$переменная_цикла]
 

Demiurg

Guest
>что each?
ссылку нажми, там какараз то, что тебе надо.
 

Фанат

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

А демиург требует свое пиво, исходя из вот этой твоей формулировки:
"как это не различает, попробуй сделай цикл for по ассоциативному массиву -- только foreach"
дело в том, что проблема отличия массивов никакого отношения к циклу фор не имеет. Ну то есть вообще. цикл фор ничего не РАЗЛИЧАЕТ. он тупо подставляет индексы.
и форич - тоже ничего не РЗЛИЧАЕЬ - он тупо перебирает массив.
и РНР - НЕ РАЗЛИЧАЕТ.
а ты, в опровержение этого утверждение говоришь совершенно дикие вещи про фор
 

Фанат

oncle terrible
Команда форума
for($i="a";$i<"d";$i++) echo $arr[$i];

вообще-то, этот код к проблеме "определения" типа массива не имеет никакого отношения.
я привожу его только для того, чтобы показать всю абсурдность связывания тима массива и for

Да.
Самое главное, чему ты должен был научиться.
1. слушать людей. которые если тебе говорят, что не различает РНР - то так оно и есть
2. собственно то, что РНР не различает.
а различаешь ТЫ САМ.
ты сам для себя придумал определения, привязал эти определения к словам и пришел нам доказывать, навязывать свое видение.
 

Фанат

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

eddie

Новичок
"как это не различает..."
соглашусь что не совсем корректно выразился -- РНР действительно одинаково хранит эти массивы. Я больше имел ввиду, что программеру надо их различать

Теперь насчет применения.

естественно мне и в голову не придет делать

PHP:
if(isAssosArray($a)
foreach(....)
else
for(...)
не дождетесь :)

а надо мне это для передачи данных в jscript (для своей CMS)

$a=Array(1,2,3,4,5) будет выглядить как a=[1,2,3,4,5]
a
$b=Array('a'=>1,'b'=>2,'c'=>3) будет выглядить как b={'a':1,'b':2,'c':3}
 

Фанат

oncle terrible
Команда форума
естественно мне и в голову не придет делать

if(isAssosArray($a)
foreach(....)
else
for(...)

не дождетесь

а надо мне это для передачи данных в jscript (для своей CMS)
а как же ты изготавливаешь эти яваскриптовские массивы?
 

Фанат

oncle terrible
Команда форума
ну, если, по твоим словам не пользуешься конструкцией
if(isAssosArray($a)
foreach(....)
else
for(...)
то как?
 

eddie

Новичок
я пользуюсь foreach для перебора массива, но при генерации кода мне надо знать какой это массив

да вот кусок кода

PHP:
...
case 'array':
	$vark=$varv=Array();
	$i=0;
	$assoc=0;
	foreach($var as $k=>$v)
	{
		if(!$assoc&&($k!==$i))$assoc=1;
		$vark[$i]=p2ji($k);
		$varv[$i]=p2jr($v);
		$i++;
	}
	if($assoc)
	{
		foreach($varv as $k=>$v)
			$varv[$k]=$vark[$k].':'.$v;
		return '{'.join(',',$varv).'}';
	}
	else
		return '['.join(',',$varv).']';
...
 

Demiurg

Guest
может проще считать все массивы ассациативными ?

зы p2ji - хорошее название для функции.
 

eddie

Новичок
было бы проще -- так бы и сделал
но в js есть неприятность (я об этом уже говорил)

a=[1,2,3] // a.length=3
b={0:1,1:2,2:3} // b.length is undefined

у меня много таких названий :)
 

Demiurg

Guest
но ты же ассациативные массивы проходишь как то.
 

Demiurg

Guest
ну вот, и обходи все одинаково. зачем тебе не ассациативные массивы ?
 

eddie

Новичок
1. мне бывает нужно знать "длину" массива до того как его обходить, a делать len=0;for(i in a)len++ -- не совсем хорошо

2. иногда на клиенте мне надо использовать другие array-functions (.slice(), .shift(), etc.)

3. добавлять элементы неудобно (b[b.length]=newValue не работает)
 

Demiurg

Guest
что то у тебя массивы на сервере, массивы на клиенте, все смешалось. обычно это до добра не доводит.
 
Сверху