Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: синтаксис в написании цикла
Форумы портала PHP.SU » » Вопросы новичков » синтаксис в написании цикла

Страниц (1): [1]
 

1. yogeswar - 05 Ноября, 2012 - 06:13:37 - перейти к сообщению
У меня чнтыре цикла

foreach ($arr1 as $ka => $value)
{
$wasy[] = $value;
}

foreach ($arr2 as $ka => $value)
{
$wasy[] = $value;
}

foreach ($arr3 as $ka => $value)
{
$wasy[] = $value;
}

foreach ($arr4 as $ka => $value)
{
$wasy[] = $value;
}

Сразу возникает желание их объединить. Я пробую так

for($j=0; $j<4; $j++)
{
foreach ($arr[$j] as $ka => $value)
{
$wasy[] = $value;
}
}

Из за синтаксиса возникает ошибка.
Как сделать правильно? Заранее благодарю.
2. AlexAnder - 05 Ноября, 2012 - 06:40:25 - перейти к сообщению
Спойлер (Отобразить)
Однако
3. yogeswar - 05 Ноября, 2012 - 08:12:02 - перейти к сообщению
Большое спасибо AlexAnder, у меня все работает.
Странная все-таки штука - синтаксис. Я попробовал ваше присоединение к переменной '$arr'.$i ($str = '$arr'.$i;) роименить к своему цыклу:
for($j=0; $j<4; $j++)
{
foreach ('$arr'.$j as $ka => $value)
{
$wasy[] = $value;
}
}
Возникает ошибка. Потом, у вас есть вспомогательная функция printr.
У меня к вам еще такие вопросы дилетанта:
1. Можно ли сделать то же самое без функции (попроще).
2. Я нигде(?) не мог найти перевода из двумерного массива в одномерный (в двумерный - сколко угодно статей)
Если что - извините. Слишком дилетант наседает на профессионала.
4. AlexAnder - 05 Ноября, 2012 - 08:19:59 - перейти к сообщению
yogeswar пишет:
Спойлер (Отобразить)

1. Можно ли сделать то же самое без функции (попроще).
2. Я нигде(?) не мог найти перевода из двумерного массива в одномерный (в двумерный - сколко угодно статей)
Если что - извините. Слишком дилетант наседает на профессионала.

Спойлер (Отобразить)
5. yogeswar - 05 Ноября, 2012 - 08:54:43 - перейти к сообщению
Этот цикл тоже работает. Спасибо AlexAnder. Странно что я не встречал где эти приемы с синтаксисом описаны.
Наверное вы легко ответите на второй мой вопрос.
6. sweb - 05 Ноября, 2012 - 10:46:06 - перейти к сообщению
...
7. yogeswar - 05 Ноября, 2012 - 14:52:50 - перейти к сообщению
sweb по-моему сделал максимум усилий, чтобы его не поняли
8. armancho7777777 - 05 Ноября, 2012 - 15:37:34 - перейти к сообщению
yogeswar, палагаю, вы пытаетесь соеденить 4 массива в один ?
(Добавление)
PHP:
скопировать код в буфер обмена
  1.  
  2. for($j=0; $j<4; $j++)
  3.  {
  4.  foreach ($arr{$j} as $ka => $value)
  5.  {
  6.  $wasy[] = $value;
  7.  }
  8.  }
  9.  

Но есть лучший способ, - встроенная функция array_merge()
PHP:
скопировать код в буфер обмена
  1.  
  2. $wasy = array_merge($arr1, $arr2, $arr3, $arr4);
  3.  
9. yogeswar - 05 Ноября, 2012 - 16:51:24 - перейти к сообщению
Спасибо armancho7777777. Сейчас обязательно попробую.
(Добавление)
armancho7777777
Я нигде(?) не мог найти перевода из двумерного массива в одномерный (в двумерный - сколко угодно статей).
Поможете мне?
(Добавление)
armancho7777777
Ваша функция array_merge прекрасно работает.
Как насчет моего предвдущего вопроса?
10. armancho7777777 - 05 Ноября, 2012 - 18:12:41 - перейти к сообщению
yogeswar пишет:
не мог найти перевода из двумерного массива в одномерный

PHP:
скопировать код в буфер обмена
  1. $arr = array(array(1,2,3), array(3,4,5), array(6,7,8));
  2.  
  3. $newArr = call_user_func_array('array_merge', $arr);
  4.        
  5. print_r($newArr);


Если не уверены в том, что все элементы являются массивами, то:
PHP:
скопировать код в буфер обмена
  1.  
  2. $arr = array(array(1,2,3), array(3,4,5), 6, 7);
  3.  
  4. $arr = array_map(
  5.                    function($val)
  6.                    {
  7.                            if(!is_array($val))
  8.                            return array($val);
  9.                            return $val;
  10.                    },
  11.                    $arr
  12.            );
  13.  
  14. $newArr = call_user_func_array('array_merge', $arr);
  15.        
  16. print_r($newArr);        
  17.  
11. yogeswar - 06 Ноября, 2012 - 05:24:49 - перейти к сообщению
Спасибо большое armancho7777777.
12. armancho7777777 - 06 Ноября, 2012 - 06:04:53 - перейти к сообщению
На здоровье.

 

Powered by ExBB FM 1.0 RC1