используя переменные в массивах в операторе for

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

Поэтому я делаю расписание, которое собирает данные из графика, который уже составлен, и я бы хотел цикл 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

0

Решение

поскольку $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;
0

Другие решения

Выражение

 $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];
?>

==> а

0

По вопросам рекламы [email protected]