Использование цикла do-while в ассоциативном массиве в php [closed]

Я немного запутался, как я могу использовать цикл do-while в ассоциативном массиве в php. У меня нет упорядоченных индексов, начинающихся с 0, поэтому я не могу выполнять простые итерации, как в случае C или Java

ПРИМЕЧАНИЕ :: Я специально хочу, чтобы поведение выполнялось во время ... т.е. цикл s будет выполняться хотя бы один раз в начале


person user401445    schedule 08.11.2011    source источник
comment
Чего ты хочешь достичь? Возможно, вам стоит просто использовать foreach ($array as $key=>$value) {}   -  person Michael Berkowski    schedule 08.11.2011
comment
В PHP foreach обычно используется гораздо чаще, чем индексированный цикл for (как в for ($i=0; $i<10; $i++))   -  person Michael Berkowski    schedule 08.11.2011
comment
Это должно ответить на ваш вопрос: stackoverflow.com/questions/1951690/   -  person Polynomial    schedule 08.11.2011
comment
Нет, я специально хочу поведения типа «делай-пока» ... т.е. цикл s будет выполнен хотя бы один раз   -  person user401445    schedule 08.11.2011
comment
@ user401445 Тогда это полностью зависит от того, какое условие вы хотите оценить. Нам нужен пример того, чего вы хотите достичь.   -  person Michael Berkowski    schedule 08.11.2011
comment
Я могу выполнить то, что хочу, используя отдельную функцию, но серьезно ли нет такого поведения итератора, с помощью которого я мог бы сделать то же самое, используя любой цикл?   -  person user401445    schedule 08.11.2011
comment
@ user401445 Ты меня не понимаешь. Вы не можете задать общий вопрос, можно ли использовать do-while с индексированным массивом. Конечно, может, это просто зависит от того, что вам нужно делать. Нам нужно увидеть, какую именно проблему в коде вы пытаетесь решить. Вы можете оценить условия, например, по возвращению array_keys() или по многим другим возможностям.   -  person Michael Berkowski    schedule 08.11.2011
comment
-1 за то, что вы не разместили фактический код, с которым у вас проблемы.   -  person Your Common Sense    schedule 08.11.2011
comment
Фактический код @ Col.Shrapnel слишком сложен для публикации   -  person user401445    schedule 08.11.2011
comment
@Michael Да..array_keys () - это то, что я искал :)   -  person user401445    schedule 08.11.2011
comment
@ user401445: Я до сих пор не понимаю, зачем вам такая эмуляция do-while, если вы могли бы использовать foreach?   -  person scube    schedule 08.11.2011
comment
@scube У меня был массив результатов, который я должен был сгруппировать в моем цикле на основе некоторых условий ... и печатал его, когда был найден первый член следующей группы результатов. Это условие печати не выполнялось для последней группы результатов ... поэтому я хотел, чтобы какое-то поведение было тем, что я хотел ... не хотел писать какой-либо хакерский код   -  person user401445    schedule 08.11.2011
comment
вы всегда можете создать упрощенный тестовый пример. особенно, если вы изучаете какую-либо новую функцию. заставить его работать в отличном упрощенном коде, а затем объединить его в свой основной проект.   -  person Your Common Sense    schedule 08.11.2011
comment
не предоставляя ни реального случая, ни реальных данных, вы ограничиваетесь одним решением, которое было опубликовано кем-то без догадки. на вашем месте я бы не тратил свое время таким непродуктивным способом   -  person Your Common Sense    schedule 08.11.2011
comment
@ Col.Shrapnel Учтите это в следующий раз :)   -  person user401445    schedule 08.11.2011


Ответы (2)


Вы можете использовать функцию array_keys.

$keys = array_keys($assocArray);
if(!empty($keys)) do{
  $key = array_pop($keys);
  // ...
}while(!empty($keys));

Если вы действительно хотите использовать цикл do-while. Но если вам подходит простой цикл while, то первый if не нужен:

$keys = array_keys($assocArray);
while(!empty($keys)){
  $key = array_pop($keys);
  // ...
};

редактировать:

Если вы действительно хотите, чтобы ваш цикл запускался хотя бы один раз:

$keys = array_keys($assocArray);
do{
  $key = array_pop($keys);
  if($key===NULL){
    // first (and last) run for an empty array
  }else{
    // ...
  }
}while(!empty($keys));
person Dutow    schedule 08.11.2011

Если вам просто нужно перебрать весь массив, вы должны использовать foreach:

foreach($array as $index => $value)
{
  // do some stuff
}

Если вам не нужен индекс вашего массива:

foreach($array as $value)
{
  // do some stuff
}
person scube    schedule 08.11.2011