Во-первых, я хотел бы извиниться, если этот вопрос уже был опубликован и задан, но поскольку английский не является моим основным языком, я думаю, что не смог найти или узнать правильные слова, чтобы найти его.
Поэтому я делаю расписание, которое собирает данные из графика, который уже составлен, и я бы хотел цикл for внутри оператора if для циклического обхода массива, который определяется днем. Мой текущий код:
if($hoursandminutes >= 1435 && $hoursandminutes < 1520) {
for ($x = 1; $x <= 2; $x++) {
$p2a1 = "property$x";
$p2a11 = $results->results->collection1[8]->$p2a1;
echo "$p2a11 <br>";
}
}
Так что я считаю, что это довольно очевидно и работает так, как должно. Но проблема в том, что массив «collection», который индексируется, содержит данные для разных дней недели, например collection1 [0], collection1 [1] содержит данные для предмета, который у нас есть первый и второй в понедельник и collection2 [0], collection2 [1] имеют то же самое, но для вторника. Итак, что я хотел бы сделать, это иметь:
$p2a11 = $results->results->collection1[8]->$p2a1;
часть, но с массивом «collection», зависящим от дня.
Это то, что у меня сейчас есть, но оно не работает:
$day = date('w');
$dantest = "collection$day";
if($hoursandminutes >= 1400 && $hoursandminutes < 1800) {
for ($x = 1; $x <= 2; $x++) {
$p2a1 = "property$x";
$p2a11 = $results->results->$dantest[0]->$p2a1;
echo "$p2a11 <br>";
echo $dantest;
}
}
Но это ничего не делает. Если я пытаюсь отобразить $ dantest, который также находится в функции для тестирования, он дважды выводит «collection1», поскольку оператор повторяется дважды, а сегодня понедельник …
Что я должен написать в переменной $ dantest для массива, чтобы быть правильно выбранным?
Заранее спасибо.
С уважением,
Thunderzzu
поскольку $dantest
это строка,
$dantest[0]
возвращает первый символ этой строки, следовательно
$results->results->$dantest[0]
оценивает
$results->results->c
Чтобы обойти это, установите промежуточные переменные:
$p2a11tmp = $results->results->$dantest;
$p2a11 = $p2a11tmp[0]->$p2a1;
или окружить dantest
с {}
:
$p2a11 = $results->results->${dantest}[0]->$p2a1;
Выражение
$p2a11 = $results->results->$dantest[0]->$p2a1;
оценивает $dantest[0]
как массив и извлекающий первый элемент (который является ‘c’, первым символом «коллекции», и, таким образом, не выдает ошибку).
Что вы хотите
$p2a11 = $results->results->${$dantest}[0]->$p2a1;
где $dantest
сначала разрешается, а затем интерпретируется остальная часть выражения.
доказательство:
<?php
$dantest = "myarray";
$myarray = array("a", "b", "c");
echo $dantest[0];
?>
==> «м»
<?php
$dantest = "myarray";
$myarray = array("a", "b", "c");
echo $$dantest[0];
?>
==> Замечание PHP: неопределенная переменная: m in — on line 5
<?php
$dantest = "myarray";
$myarray = array("a", "b", "c");
echo ${$dantest}[0];
?>
==> а