#php #html #codeigniter
#php #HTML #codeigniter
Вопрос:
У меня есть функция, которая преобразует массив в массив со строками html-кода для печати.
Одна из моих строк html создается, только если определенная строка содержит число 1. Var_dump показывает, что строка действительно содержит 1. Строка html затем объединяет строку в кучу пробелов (для аккуратного форматирования html).
Однако, когда я повторяю эту строку html, строки там нет. Если я заменю строку в моей строке html символом 1, то она отобразится должным образом.
Если я изменяю строку внутри оператора if, проверяя, содержит ли строка «1», то это дает мне результирующую строку (1) «1», чего я и ожидаю.
Строка, о которой идет речь:
$item['qty']
Рассматриваемый код:
if ($item['qty'] == '1') {
$html[] = '<div class="qty">'. $item['qty'] .'</div>';
}
В результате ничего не повторяется. Если я использую следующий код, то я вижу символ 1 в том месте, где я ожидаю:
if ($item['qty'] == '1') {
$html[] = '<div class="qty">1</div>';
}
И использование var_dump дает следующий результат:
if ($item['qty'] == '1') {
var_dump($item['qty']);
exit();
}
string(1) "1"
Моя строка явно содержит значение 1. Это явно принимается оператором if. Все мои другие строки абсолютно нормально повторяются.
Редактировать:
Упростило воспроизведение проблемы, поэтому, если я использую следующую строку:
$html[] = ' <div class="qty">'.$item['sta'].'</div>';
В моем исходном коде я получаю следующее:
<div class="qty">0</div>
Это ожидаемо. var_dump of $item[‘sta’]:
string(1) "0"
Если я изменю код на:
$html[] = ' <div class="qty">'.$item['qty'].'</div>';
Я получаю следующий источник:
<div class="qty"></div>
var_dump of $item[‘кол-во’]:
string(1) "1"
Редактировать 2:
Следующий блок кода, похоже, удаляет значение $item[‘qty’] из моего html:
function prepareItems ($itemArray,$containerSize,$page,$table) {
$num = 0;
foreach ($itemArray as $item) {
for ($i = 1; $i <= 4; $i ) {
for ($i2 = 1; $i2 <= $containerSize; $i2 ) {
$preparedItems[$i][$i2] = $this->itemToHtml($page,$table,$num,$item);
if ($num == 0) { var_dump(htmlspecialchars($preparedItems['1']['1']['3'])); }
$num ;
}
}
}
var_dump(htmlspecialchars($preparedItems['1']['1']['3']));exit();
return $preparedItems;
}
Это дает следующий вывод var_dump:
string(58) " <div class="qty">1</div>" string(57) " <div class="qty"></div>"
Если я добавлю разрыв во все свои циклы, я получу правильный вывод var_dump:
function prepareItems ($itemArray,$containerSize,$page,$table) {
$num = 0;
foreach ($itemArray as $item) {
for ($i = 1; $i <= 4; $i ) {
for ($i2 = 1; $i2 <= $containerSize; $i2 ) {
$preparedItems[$i][$i2] = $this->itemToHtml($page,$table,$num,$item);
if ($num == 0) { var_dump(htmlspecialchars($preparedItems['1']['1']['3'])); }
$num ;
break;
}
break;
}
break;
}
var_dump(htmlspecialchars($preparedItems['1']['1']['3']));exit();
return $preparedItems;
}
var_dump:
string(58) " <div class="qty">1</div>" string(58) " <div class="qty">1</div>"
Что насчет этой функции, удаляющей значение, которое мне нужно?
Комментарии:
1. как вы отображаете $ html?
2.
<td><?php foreach ($cols as $row) { echo $row; } ?></td>
3. o.O этот код, похоже, не совпадает с вашим именем переменной $ html?
4. …Что
$cols
..?5. и что произойдет, если вы сделаете :
<td><?php foreach ($html as $row) { echo $row; } ?></td>
Ответ №1:
Решена. Мне нужно было удалить строку foreach, поскольку она путала то, что передавалось моей функции itemToHtml:
function prepareItems ($itemArray,$containerSize,$page,$table) {
$num = 0;
for ($i = 1; $i <= 4; $i ) {
for ($i2 = 1; $i2 <= $containerSize; $i2 ) {
$preparedItems[$i][$i2] = $this->itemToHtml($page,$table,$num,$itemArray[$num]);
if ($num == 0) { var_dump(htmlspecialchars($preparedItems['1']['1']['3'])); }
$num ;
}
}
var_dump(htmlspecialchars($preparedItems['1']['1']['3']));exit();
return $preparedItems;
}
Правильный var_dump:
string(58) " <div class="qty">1</div>" string(58) " <div class="qty">1</div>"
Спасибо yunzen, который подсказал мне, где искать.