Как я могу получить два массива результирующих наборов в одном массиве без повторного вызова функции?

Здесь я запускаю два запроса, вызывая одну функцию.

$category  = [];
$sub_category = [];

$query_parent_category = "select name from category where parent_id = 0";
$query_child_category="select name from category where parent_id = 1";
$category = $this->runSelectQuery($query_parent_categoty);
$sub_category = $this->runSelectQuery($query_child_categoty);

return array($category,$sub_category);

функция runSelectQuery как…

 public function runSelectQuery($sql) {
$result = mysqli_query($this->con, $sql);
$listinfdata = array();

while ($row = mysqli_fetch_assoc($result)) {
$listinfdata[] = $row;
}

return $listinfdata;
}

но это не оптимизация lool .. мне нужно, чтобы два массива в одном вызове функции .. что означает $category[] а также $sub_category[] в одном массиве .. результат хотел бы быть

Array
(
[0] => Array
(
[name] => MEN
[subcat] => Array
(
[0] => Jeans
[1] => Shirts
[2] => T-shirts
[3] => Chinos
[4] => Blazers
[5] => Night Wear
)

)
)

и так далее ..

0

Решение

Больше ответа здесь …

Как насчет, если у вас более 1 родительской категории

как это

введите описание изображения здесь

Используйте этот запрос

SELECT `parent_category`.`id`, `parent_category`.`name` as `parent_category`, `child_category`.`name` as `child_category` FROM `category` `parent_category` join `category` `child_category` on `parent_category`.`id` = `child_category`.`parent_id`

Этот запрос дает такой результат

введите описание изображения здесь

Сначала сгруппировать вашу категорию

объявите переменную, которая содержит parent_id вашего $row

$prev_parent = null;

пусть это будет как ноль

затем

в то время как цикл

Создать 3 условия

Первое условие: проверьте, если $prev_parent пусто, тогда создайте свою первую категорию

if ($prev_parent == null) {
$prev_parent = $row['id'];
$listinfdata[] = array(
'name' => $row['parent_category'],
'subcat' => array($row['child_category'])
);
}

Это условие создаст что-то вроде этого

Array
(
[0] => Array
(
[name] => 'Parent Category 1'
[subcat] => Array
(
[0] => 'Child Category 1'
)
)
);

Второе условие: проверьте, если $row['id'] или parent_id совпадает с $ prev_parent, который является вашей предыдущей родительской идентификационной категорией

Если это соответствует этому условию, просто вставьте подкатегорию в последние подкатегории последней родительской категории.

`sizeof($listinfdata)-1` since array always started at index 0

Сделай это

$prev_parent = $row['id'];
$listinfdata[sizeof($listinfdata)-1]['subcat'][] = $row['child_category'];

Это условие создаст что-то вроде этого

Array
(
[0] => Array
(
[name] => 'Parent Category 1'
[subcat] => Array
(
[0] => 'Child Category 1',
[1] => 'Child Category 2'
)
)
);

Последнее условие else означает, что если $prev_parent не пустой, но текущая родительская_категория не совпадает с
$prev_parent вставить другую родительскую категорию с ее первой подкатегорией

$prev_parent = $row['id'];
$listinfdata[] = array(
'name' => $row['parent_category'],
'subcat' => array($row['child_category'])
);

Это условие создаст что-то вроде этого

Array
(
[0] => Array
(
[name] => 'Parent Category 1'
[subcat] => Array
(
[0] => 'Child Category 1',
[1] => 'Child Category 2'
)
),
[1] => Array
(
[name] => 'Parent Category 2'
[subcat] => Array
(
[0] => 'Child Category 1',
)
)
);

Итак, ваш код будет таким

<?php

$category  = [];
$sub_category = [];
$query_category = "SELECT `parent_category`.`id`, `parent_category`.`name` as `parent_category`, `child_category`.`name` as `child_category` FROM `category` `parent_category` join `category` `child_category` on `parent_category`.`id` = `child_category`.`parent_id`";

$sub_category = $this->runSelectQuery($query_category);

return array($sub_category);function `runSelectQuery` is like...

public function runSelectQuery($sql) {
$result = mysqli_query($this->con, $sql);
$listinfdata = array();

$prev_parent = null;
while ($row = mysqli_fetch_assoc($result)) {
$category = null;
if ($prev_parent == null) {
$prev_parent = $row['id'];
$listinfdata[] = array(
'name' => $row['parent_category'],
'subcat' => array($row['child_category'])
);
} else if ($row['id'] == $prev_parent) {
$prev_parent = $row['id'];
$listinfdata[sizeof($listinfdata)-1]['subcat'][] = $row['child_category'];
} else {
$prev_parent = $row['id'];
$listinfdata[] = array(
'name' => $row['parent_category'],
'subcat' => array($row['child_category'])
);
}
}

return $listinfdata;
}

И результат такой

введите описание изображения здесь

2

Другие решения

Для этого вы можете просто изменить запрос, используя оператор «ИЛИ».

$category  = [];
$query_parent_categoty = "select name from category where parent_id = 0 OR parent_id = 1";
$category = $this->runSelectQuery($query_parent_categoty);
return array($category);
0

Так же, как прокомментировал @beginner, используя IN лучше, чем OR

$query = "SELECT name FROM category WHERE parent_id IN (0,1)";
$category = $this->runSelectQuery($query);
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector