#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 в результатах, я могу его исключить? С уважением