Динамическое создание переменных PHP в цикле foreach

Я просто пытаюсь динамически создавать переменные PHP. ниже приведен код, который я пробовал.

    if ($BrickTerritorys)
    {
            foreach($BrickTerritorys as $index=>$BrickTerritory)
            {
                ${"$T.$index"}= $BrickTerritory->TerritoryID;
                ${"'Weightage'.$index"} = $BrickTerritory->Weightage;
            }
            echo $T1."-".$T2."--".$Weightage1."---".$Weightage2; exit;
    }

while 
$BrickTerritorys is 
 [1] => stdClass Object
        (
            [id] => 119
            [TerritoryID] => HYD-2-CMD
            [BrickCode] => 16
            [BrickName] => BUHURO
            [Weightage] => 40.00
            [BPCode] => bp00066
            [GroupCode] => CMD
        )
    [2] => stdClass Object
        (
            [id] => 36330
            [TerritoryID] => HYD-1-CMD
            [BrickCode] => 16
            [BrickName] => BUHURO
            [Weightage] => 60.00
            [BPCode] => bp00066
            [GroupCode] => CMD
        )

Когда я печатаю последний, ничего не печатается. Любая помощь очень ценится, пожалуйста.

заранее спасибо

что делает var_dump ($ GLOBALS); говорит?

AnTrakS 18.09.2018 08:24

Использование переменных переменных как правило указывает на несоответствующее хранение данных массива. Вы добавляете в свой код ненужную свертку.

mickmackusa 18.09.2018 08:33

["'T'.1"] => строка (9) "HYD-2-CMD" ["' Weightage'.1"] => строка (5) "40.00" ["'T'.2"] = > string (9) "HYD-1-CMD" ["'Weightage'.2"] => string (5) "60.00" результат глобальной переменной ... но все же я не получил желаемых результатов ... какой-либо помощи? ?

Salman 18.09.2018 08:37

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

mickmackusa 18.09.2018 08:44

@Salman, вы понимаете, что поставили зеленую галочку за неправильный ответ?

mickmackusa 23.09.2018 12:44
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
937
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Попробуйте изменить эти строки следующим образом:

        ${"T$index"}= $BrickTerritory->TerritoryID;
        ${"Weightage$index"} = $BrickTerritory->Weightage;

В вашем коде ${"$T.$index"} $ T ищет переменную, и вы должны получить неопределенную переменную $ T, поэтому вам нужно удалить знак $, если вы хотите иметь переменные T1, T2.

После этого, ${"'Weightage'.$index"}, апострофы между Weightage означают, что ваша переменная будет иметь вид «Weightage» 1, «Weightage» 2 ... и т. д.

@Salman Этот ответ дает желаемый результат БЕЗ уведомлений. Доказательство: 3v4l.org/i0rVo

mickmackusa 18.09.2018 09:05
Ответ принят как подходящий

${"T$index"}, а также ${"Weightage$index"}

вам не нужна точка, или вы можете использовать ${'T' . $index}. посмотри на точку. это не операция сложения, пока он находится в "". после этого кода:

if ($BrickTerritorys)
{
    foreach($BrickTerritorys as $index=>$BrickTerritory)
    {
        ${"$T.$index"}= $BrickTerritory->TerritoryID;
        ${"'Weightage'.$index"} = $BrickTerritory->Weightage;
    }
    echo $T1."-".$T2."--".$Weightage1."---".$Weightage2; exit;
}

Ваш 1 балл неверен, он начинается с 1 и четко упоминается в деталях вопроса. и ваш второй пункт абсолютно в порядке, теперь он работает. Большой палец вверх для вас (у)

Salman 18.09.2018 08:45

Мне не нравится цитирование в этом ответе. Я считаю, что это неверный ответ. Это проверено?

mickmackusa 18.09.2018 08:47

@ Салман, этот ответ не годится. Он производит только уведомления, а не правильный вывод. Совершенно неверно. Доказательство: 3v4l.org/YEejB Пожалуйста, переосмыслите свою зеленую галочку на благо этого сообщества.

mickmackusa 18.09.2018 09:03

Кто поддерживает этот неправильный ответ? Это ОПРЕДЕЛЕННО введет в заблуждение / запутает исследователей.

mickmackusa 20.09.2018 02:30

Это можно сделать несколькими способами без переменных переменных И получить полностью динамический результат.

Вот один: (Демо)

$array = (array)$BrickTerritorys;             // cast as array
$tids = array_column($array, 'TerritoryID');  // isolate column data
$was = array_column($array, 'Weightage');     // isolate column data
$merged = array_merge($tids, $was);           // add 2nd array data after 1st array data
foreach ($merged as $i => $v) {
    echo str_repeat('-', $i) , $v;            // increase hyphens on each iteration starting from 0
}

Вывод: (примечание, без жестко запрограммированного эха)

HYD-2-CMD-HYD-1-CMD--40.00---60.00

Другие вопросы по теме