Цикл Foreach, с тоннами переменных

#php

#php

Вопрос:

У меня есть куча текста в базе данных, которая идентифицируется «grp», как бы я мог привязать каждый текст к «примеру :

 if($grp->$grp === '1') {
---> $text $grp->$grp <--- = $grp->text
}
 

Возможно ли выполнить цикл foreach amp; while, который связывает текст с каждым «text1, text2 и т. Д.»?

Я пробовал этот способ

 foreach ($getgrouptxt as $grp) {
 $grpnr = $grp->grp;
  while ($grpnr < '63') {
   $text $grpnr = $grp->text;}
}
}
 

Так что в основном
Получение текста из массива, использование foreach, перебирающего все из них

Я хочу, чтобы он устанавливал для текстового параметра var ($text»number») значение $ grp-text, каждый раз, когда он набирает число, пока не будет достигнуто 62

Комментарии:

1. Есть ли какая-либо причина, по которой вам нужна динамически именуемая переменная (т.Е. $test$grpnr ) Вместо массива (который в большинстве случаев является правильным представлением) ( $test[$grpnr] )?

2. Нет, не совсем. как бы вы посоветовали мне это сделать?

Ответ №1:

для числового сложения

Вы намереваетесь добавить число к строке, но используете оператор числового сложения ( ) вместо оператора конкатенации строк ( . ) . Итак, вместо $text $grpnr вам нужно $text.$grpnr

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

Если вы хотите сохранить $text.$grpnr в $grp->text , вам нужно инвертировать присваивание:

 $grp->text = $text.$grpnr;
 

Если вы хотите использовать имя динамической переменной, используйте {} вокруг него

Если $text.$grpnr должно быть имя переменной, и вы собираетесь сохранить $grp->text в нем, то:

 {$text.$grpnr} = $grp->text;
 

Однако это не будет работать в PHP 5.

Остерегайтесь сравнения чисел в виде строк

‘7’ < ’63’

это false потому, что PHP будет выполнять текстовое сравнение, а ‘7’ находится за ‘6’ в алфавите. Если вы хотите использовать числовые сравнения, сравните с 63 и преобразуйте $grpnr в числовой тип, если он текстовый.

Предложение

Насколько я понимаю вашу проблему, вам нужно что-то вроде

 foreach ($getgrouptxt as $grp) {
    $grpnr = $grp->grp;
    while (((int)$grpnr) < 63) {
        $grp->text = $text.$grpnr;
    }
}
 

Комментарии:

1. Спасибо за совет {}. Удалось это исправить, выполнив следующие действия foreach($grptxt as $key => $value) { if($key < '63') { ${"text".$key} = $value; } }

2. @MilboDoe добро пожаловать. Если этот ответ помог вам решить проблему, то вы можете рассмотреть возможность принятия его в качестве правильного ответа.

3. Ваш ответ будет принят как правильный ответ, однако я обошел способ сделать это с помощью массива. foreach ($getgrouptxt as $grps){ $grpnr = $grps->grp; $text = $grps->text; array_push($grptxt[$grpnr]=$text); }

4. @MilboDoe спасибо. Ваш новый код больше не сравнивается с 63. Хорошо ли это в вашем случае?