Заполнение пустого массива значениями переменных в цикле

Статус
В этой теме нельзя размещать новые ответы.

Ammy

Создатель
Регистрация
29 Авг 2009
Сообщения
10
Реакции
0
Здравствуйте!

Имею цикл, в котором проверяется существование переменной, а затем, по сути (сабжу), нужно добавить её в массив, но не так, чтобы однократно, а с запоминаением, потому что переменная не одна и в цикле будут аналогичным образом обрабатываться и добавляться другие переменные. На выходе необходимо иметь массив, содержащий значения всех переменных, которые подверглись обработке в цикле.

PHP:
for ($i = 0; $i < count($matches[0]); $i++) { 
   $url = 'server'.$i; 
   if (isset($$url)) { 
      $array = array(); 
      array_unshift($array,$$url); 
      return($ar); 
   } 
}

Возвращает только одно значение в массиве..

---
До этого пробовала более простым, но не безопасным / плохим способом простого перебора:

PHP:
return @array($server1, $server2, $server3)

Естественно оно выдавало ошибки, указывая на отсутствие некоторых элементов (а их ведь может быть и больше, и меньше), поэтому решила воспользоваться другим методом, который указала выше.
---



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


РЕШЕНИЕ:

PHP:
$array = array(); 
for ($i = 0; $i < count($matches[0]); $i++) {  
   $url = 'server'.$i;  
   if (isset($$url)) {   
      array_unshift($array,$$url);  
   }  
} 
return($array);

Вопрос снят! Проблема решена благодаря MONtrade'у и всеми, кто оперативно предоставил свои варианты решения проблемы!
СПАСИБО ВАМ!
 
быть может поставить return($ar); после цикла? вот так:
PHP:
$array = array();
for ($i = 0; $i < count($matches[0]); $i++) { 
   $url = 'server'.$i; 
   if (isset($$url)) {  
      array_unshift($array,$$url); 
   } 
}
return($ar);
или точно известно, что при каждой обработке цикла будет найдена только одна переменная?
 
  • Нравится
Реакции: Ammy
Их может быть сколько угодно.

До цикла они генерируются, и им присваиваются значения.

Пример сгенерированных: $server1 = 127.0.0.1; $server2 = 127.0.0.2, $server3 = ...., $server50.... $server60

Теперь в другом (текущем) цикле нужно проверить их существование, и занести значения в массив. :)
 
return($ar); - вот это тебе зачем?
Попробуй вот так
--
$array = array();
for ($i = 0; $i < count($matches[0]); $i++) {
$url = 'server'.$i;
if (isset($$url)) array_unshift($array,$$url);
}
 
  • Нравится
Реакции: Ammy
Ответ уже дали верный. Только не

PHP:
return($ar);
а
PHP:
return($array);


Ammy
Генерировать переменные до цикла таким способом - мегадыра в безопасности. Надо там, где генерируются переменные прямо и генерировать сразу массив таких переменных, а не вылавливать их потом по именам.
 
  • Нравится
Реакции: Ammy
Ответ действительно был дан MONtrade'ом, за что ему огромное спасибо. Не подумала заранее, что некоторые функции нужно было вынести за пределы цикла. Удивительно... Счётчик вынесла, а про остальное забыла..

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

Я привела лишь быстрый пример кода, потому что сам код является очень большим. И, как вы заметили, переменные действительно геренируются внутри одного цикла (foreach). Просто мне было удобнее привести здесь немного иной, более простой пример, чтобы особо не грузить людей своими проблемами. Спасибо вам, спасибо всем остальным за помощь! :) Очень оперативно!
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху