Создайте цикл foreach из значения

#php #mysql #wordpress

Вопрос:

у меня есть этот код:

 $pr  =  $tst_db->mlm_get_parent(1);        // give me the value = 4 (parent_id of id 1)
$pr1 =  $tst_db->mlm_get_parent($pr);     // give me the value = 7 (parent_id of id 4)
$pr2 =  $tst_db->mlm_get_parent($pr1);   // give me the value = 5 (parent_id of id 7)
$pr3 =  $tst_db->mlm_get_parent($pr2);  // give me the value = 2 (parent_id of id 5)
$pr4 =  $tst_db->mlm_get_parent($pr3); // give me the value = 0 (becouse id 2 not have parent id)
echo $pr; echo $pr1; echo $pr2; echo $pr3; echo $pr4;
 

Его можно сделать как цикл foreach
с автоматическим созданием ($pr(num) = $tst_db->mlm_get_parent($pr(num);)>
и остановите его, когда некоторые $pr равны 0?
Мне тоже нужно повторить все parent_it, созданные в этом автоматическом цикле.

Это то, что я ожидаю получить похожие результаты:
Все parent_id идентификатора 1: 4,7,5,2

Заранее спасибо

Ответ №1:

Это выведет на экран всех родителей идентификатора 1:

 $id = 1;

while($id != 0) {
    $id  =  $tst_db->mlm_get_parent($id);
    echo $id;
}

// this will print: 47520
 

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

 $arr = array();
$id = 1;
$pr = 'pr';
$count = 0;

while($id != 0) {
    $id  =  $tst_db->mlm_get_parent($id);
    $arr[$pr] = $id;
    $ccount  ;
    $pr = 'pr'.$count;
}

print_r($arr);  // prints: Array([pr] => 4 [pr1] => 7 [pr2] => 5 [pr3] => 2 [pr4] => 0)
echo join(",", $arr);   // prints 4,7,5,2,0
 

Для создания независимых переменных на основе ключей массива можно использовать метод extract() :

 extract($arr);

echo $pr;   // prints 4
echo $pr3;  // prints 2
 

Примечание:

  • extract() Метод перезапишет все существующие переменные с именами, равными ключевым значениям массива.
  • Не используйте extract() ненадежные данные, такие как ввод данных пользователем (например $_GET , $_FILES ).

Вы также можете создать foreach цикл, который повторяет заполненный $arr массив:

 foreach($arr as $key => $val) {
    // Do something here.
    // Although this foreach is not necessary since you could
    // have already done what you want to do within the above 
    // while loop
}
 

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

1. Извините @Ivan86, но parent_id не в порядке, как 2 — 3 — 4, у некоторых идентификаторов родительский идентификатор отличается и не в порядке.

2. @GINOGINI Извините, боюсь, я не понимаю, чего именно вы пытаетесь достичь. Пожалуйста, обновите свой вопрос, чтобы уточнить, что вы ожидаете в качестве результата.

3. Спасибо @Ivan86 за ответ. Мне нужно получить все parent_id 1, поэтому единственный способ-создать различные pr, которые берут идентификатор из предыдущего parent_id, и когда результаты parent_id равны 0, идентификатор не имеет родителя. Но я хочу сделать автомат такого рода.

4. @GINOGINI Я отредактировал, теперь это должно решить вашу проблему.

5. Большое спасибо @Ivan86 , ты спас меня. Небольшой вопрос, в этом коде «$id = 1; в то время как($id != 0) { $id = $tst_db->mlm_get_parent($id); echo $id;} » Повторяет все родители идентификатора 1, но также повторяет 0 (родитель последнего идентификатора), но я не хочу 0 в результатах, я могу его исключить? С уважением