Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Nubby
3 / 3 / 2
Регистрация: 22.03.2015
Сообщений: 25
1

$$var как параметр цикла for

04.12.2019, 16:05. Просмотров 804. Ответов 3
Метки нет (Все метки)

Что не так с этим кодом?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
 error_reporting(E_ALL);
 $a = array (
  1, 2, 3, 4,
  5, 6, 7, 8,
  9,10,11,12
 );
 $p = array ('i'=>3,'j'=>4);  //Размерность матрицы
 if (isset($_GET['t'])) $p = array_reverse ($p);
 $keys = array_keys($p);
 $i = $keys[0]; $i2 = $p[$i];
 $j = $keys[1]; $j2 = $p[$j]; //Порядок циклов
 //echo "$i,$i2,$j,$j2";
 echo '<pre>';
 for ($$i = 0, $k = 0; $$i < $i2; $$i++) {
  for ($$j = 0; $$j < $j2; $$j++) echo $a[$k++].' ';
  echo "\n";
 }
 echo '</pre>';
?>
Если запустить в виде http://localhost/cycles2.php?t , то есть, с аргументом, печатает, как ожидалось
1 2 3
4 5 6
7 8 9
10 11 12
Если же http://localhost/cycles2.php , то
Notice: Undefined variable: 0 in D:\xampp\htdocs\cycles2.php on line 15



Notice: Undefined variable: 0 in D:\xampp\htdocs\cycles2.php on line 16

1

Notice: Undefined variable: 0 in D:\xampp\htdocs\cycles2.php on line 16

2 3 4
Локалхост на XAMPP с PHP7 или удаленный хост с PHP5.X - одинаково

Вроде же только порядок циклов должен поменяться?
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2019, 16:05
Ответы с готовыми решениями:

Как сцепить строки? Например <? $var='Ура!'; $var=$var+' Еще раз...'; echo $var; ?>
Вот пример: &lt;? $var='Ура!'; $var=$var+' Еще раз...'; echo $var; ?&gt; Выводит Ура!0

3

sasha0012
853 / 400 / 227
Регистрация: 21.06.2012
Сообщений: 1,458
04.12.2019, 16:18 2
Лучший ответ Сообщение было отмечено Nubby как решение

Решение

все $$ меняем на $
1
Nubby
3 / 3 / 2
Регистрация: 22.03.2015
Сообщений: 25
04.12.2019, 16:31  [ТС] 3
помогло, спасибо... то есть, $$var не может быть параметром цикла?
а почему тогда вот это работает?.. (из другого варианта)

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
 $p = array ('i','j');
 if (isset($_GET['p'])) {
  if ($_GET['p']=='ji') $p = array ('j','i');
 }
 $n = 5; $m = 4; //Размерность таблицы
 $rows = $p[0];
 $cols = $p[1]; //Порядок циклов
 echo '<table  style="border-collapse: collapse;">';
 for ($$rows=1; $$rows<=$n; $$rows++) {
  echo '<tr>'; 
  for ($$cols=1; $$cols<=$m; $$cols++) {
   echo '<td style="border: 1px dotted black">'.$i.','.$j.'</td>';
 }
  echo '</tr>';
 }
 echo '</table>';
?>
Без параметра или http://localhost/cycles.php?p=ij
1,1 1,2 1,3 1,4
2,1 2,2 2,3 2,4
3,1 3,2 3,3 3,4
4,1 4,2 4,3 4,4
5,1 5,2 5,3 5,4
http://localhost/cycles.php?p=ji
1,1 2,1 3,1 4,1
1,2 2,2 3,2 4,2
1,3 2,3 3,3 4,3
1,4 2,4 3,4 4,4
1,5 2,5 3,5 4,5
вроде и доходит, что есть "переменная переменных", а ясности все равно нет

Добавлено через 6 минут
Тьфу, кажется дошло... всё дело в 'i' и '$i'... если буквы поменять, будет и первый код работать с $$

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
 error_reporting(E_ALL);
 $a = array (
  1, 2, 3, 4,
  5, 6, 7, 8,
  9,10,11,12
 );
 $p = array ('i'=>3,'j'=>4);  //Размерность матрицы
 if (isset($_GET['t'])) $p = array_reverse ($p);
 $keys = array_keys($p);
 $r = $keys[0]; $i2 = $p[$r];
 $c = $keys[1]; $j2 = $p[$c]; //Порядок циклов
 echo '<pre>';
 for ($$r = 0, $k = 0; $$r < $i2; $$r++) {
  for ($$c = 0; $$c < $j2; $$c++) echo $a[$k++].' ';
  echo "\n";
 }
 echo '</pre>';
?>
0
sasha0012
853 / 400 / 227
Регистрация: 21.06.2012
Сообщений: 1,458
04.12.2019, 17:19 4
Цитата Сообщение от Nubby Посмотреть сообщение
вроде и доходит, что есть "переменная переменных", а ясности все равно нет
в php нельзя давать имена переменным начинающимся с цифр.
PHP
1
2
3
$1 = 1; //ошибка 
$v = 1; //правильно
$v1 = 1; //правильно
0
04.12.2019, 17:19
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2019, 17:19

Program1.pas(7): Параметр цикла for в PascalABC.NET должен описываться в заголовке цикла. Как исправить?
Program1.pas(7) : Параметр цикла for в PascalABC.NET должен описываться в заголовке цикла. Как...

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.