Переменная, содержащая строку, ничего не повторяет

#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, который подсказал мне, где искать.