#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. Хорошо ли это в вашем случае?