Как увеличить значение $ var без цикла в PHP? - PullRequest
3 голосов
/ 18 ноября 2010

У меня есть проблема, когда я хочу увеличить значение с 1 и применить его к моему HTML, но я не могу использовать цикл for() или while() (по крайней мере, я думаю, что не могу). Я настраиваю программу электронных товаров (opencart), и моих знаний php недостаточно для решения проблемы.

Есть эта функция, которая отображает категории из магазина. Он использует переменную, которая постоянно обновляется через $var .= "value".

Я до сих пор знаю, сколько существует подкатегорий, но я не знаю, как применить этот диапазон к моему HTML.

Я работаю над ситуацией, подобной приведенной ниже

<ul id="cats">
 <li id="cat1">Cat
  <ul id="sub1">
   <li>item</li>
   <li>item</li>
  </ul>
 </li>
 <li id="cat2">Cat
  <ul id="sub2">
   <li>item</li>
   <li>item</li>
  </ul>
 </li>
</ul>

Понятия не имею, как увеличить количество неупорядоченных списков second . Ниже кода, где генерируются вторые неупорядоченные списки.


[..]
$cPiD = strlen($parent_id);

if ($results) {
 if ($parent_id == 0) {
  $output .= '<ul id="cats">';
 } else {
  $output .= '<ul id="sub'.$cPiD.'">';
 }
}

[..]

Переменная $cPiD содержит общее количество подкатегорий (в данном случае 2). Я хочу, чтобы эта переменная автоматически применяла правильный номер к неупорядоченному списку (поэтому примените id="sub1" к первому неупорядоченному списку и id="sub2" ко второму (как в моем примере выше)).

Проблема в том, что я не могу использовать цикл for() после части else, потому что в моем HTML я получу два <ul> тега вместо одного.

Ниже кода PHP, где все это происходит

<code>
$category_id = array_shift($this->path);
$output = '';
$results = $this->model_catalog_category->getCategories($parent_id);
$count = 0;
$cPiD = strlen($parent_id);</p>

<p>if ($results) {
 if ($parent_id == 0) {
  $output .= '<ul id="cats">';
 } else {
  $output .= '<ul id="sub'.$cPiD.'">';
 }
}</p>

<p>foreach ($results as $result) {
 $count++;
 if (!$current_path) {
  $new_path = $result['category_id'];
  $output .= '<li id="cat'.$count.'">';
 } else {
  $new_path = $current_path . '_' . $result['category_id'];
  $output .= '<li>';
 }</p>

<p>$children = '';</p>

<p>$children = $this->getCategories($result['category_id'], $new_path);</p>

<p>$output .= $result['name'];</p>

<p>$output .= $children;</p>

<p>if (!$current_path) {
  $output .= '</li>';
 } else {
  $output .= '</li>';
 }</p>

<p>}</p>

<p>if ($results) {
 if ($parent_id == 0) {
  $output .= '</ul>';
 } else {
  $output .= '</ul>';
 }
}

Кто-нибудь может иметь представление, как решить эту проблему?

EDIT: О, я пытаюсь добавить следующую конструкцию в цикл foreach(), но это создает проблемы, когда у определенных категорий нет подкатегорий.

if (!$current_path) {
 $output .= '$result['name'] . ' <ul id="sub'.$count.'">';
}else{
 $output .= $result['name'];
}

1 Ответ

0 голосов
/ 18 ноября 2010

Вы можете использовать это:

// at the top of your code (ouside of the loop)
$cPiD = 1;
// inside the loop you need to increment the parameter 
$output .= '<ul id="sub'.$cPiD++.'">';

После каждого использования элемента его значение будет увеличиваться на 1. (после его использования)

...