Не могу слить 2 массива в один

204
29 августа 2018, 23:10

никак не могу объединить 2 массива в 1, массивы формируются из базы mysql, array_merge не помог

Мне нужен 1 массив, чтоб полностью слить, заранее всем спасибо, очень рассчитываю на вашу помощь

Мой код php Модели (он формирует и объединяет массивы)

public function get_Product_from_Att($att_id, $att_value_id) {
    $query = $this->db->query("SELECT * FROM `import_attribute_values` WHERE `id`= '$att_value_id'");
    $res = $query->row;
$ImportAttValue = trim($res['idimport']);

$query = $this->db->query("SELECT * FROM `os_product_attribute` WHERE `attribute_id` = '$att_id' and `text` = '$ImportAttValue'");
$product_ids = $query->rows;

foreach ($product_ids as $product_id){
  $product_id = $product_id['product_id'];
    $query = $this->db->query("SELECT * FROM `os_product` WHERE `product_id` = '$product_id'");
    $row1=$query->rows;
    $query = $this->db->query("SELECT * FROM `os_product_description` WHERE `product_id` = '$product_id'");
    $row2 = $query->rows;   
$result = array_merge($row1, $row2);    

}
return $result;     
    }

На выходе получаются 2 массива, но нужен один

Array ( [0] => Array ( [product_id] => 7 [model] => 2018 [sku] => [upc] => 659737 [ean] => 84х108/32 [jan] => твердый [isbn] => 978-5-17-109810-0, 978-0-000-00000-2, 978-0-000-00000-2 [mpn] => 320 [location] => [quantity] => 100 [stock_status_id] => 7 [image] => catalog/import_files/dir_pic/659737.jpg [manufacturer_id] => 4 [shipping] => 1 [options_buy] => 0 [price] => 300.0000 [points] => 0 [tax_class_id] => 0 [date_available] => 0000-00-00 [weight] => 0.00 [weight_class_id] => 1 [length] => 0.00 [width] => 0.00 [height] => 0.00 [length_class_id] => 1 [subtract] => 1 [minimum] => 1 [sort_order] => 1 [status] => 1 [viewed] => 5 [date_added] => 0000-00-00 00:00:00 [date_modified] => 0000-00-00 00:00:00 )

[1] => Array ( [product_id] => 7 [language_id] => 1 [name] => Витя Малеев в школе и дома. Повесть и рассказы [description] => <p>В книгу классика детской литературы Н.Н. Носова «Витя Малеев в школе и дома. Повесть и рассказы» вошла повесть о Вите Малееве и рассказы. Герои Носова весёлые и непосредственные. Они умеют дружить и справляться со своими недостатками. В 1952 году Н.Н. Носов за повесть «Витя Малеев в школе и дома» получил Сталинскую премию. В 1954 году по повести был снят фильм «Два друга». Иллюстрации в книге народного художника СССР В.Н. Горяева. Для младшего школьного возраста.</p> [short_description] => [tag] => [meta_title] => Носов Николай Николаевич - Витя Малеев в школе и дома. Повесть и рассказы - 978-5-17-109810-0, 978-0-000-00000-2, 978-0-000-00000-2 [meta_h1] => Витя Малеев в школе и дома. Повесть и рассказы [meta_description] => Продажа книг для взрослых и детей. Витя Малеев в школе и дома. Повесть и рассказы выгодно. Огромный выбор по самым различным тематикам [meta_keyword] => Витя Малеев в школе и дома. Повесть и рассказы, купить, выгодно, в магазине, онлайн )

)

Answer 1

Может все-таки выбрать все сразу одним запросом ?

public function get_Product_from_Att($att_id, $att_value_id) {
    $query = $this->db->query("SELECT * FROM `import_attribute_values` WHERE `id`= '$att_value_id'");
    $res = $query->row;
$ImportAttValue = trim($res['idimport']);

$query = $this->db->query("SELECT * FROM `os_product_attribute` WHERE `attribute_id` = '$att_id' and `text` = '$ImportAttValue'");
$product_ids = $query->rows;

foreach ($product_ids as $product_id){
  $product_id = $product_id['product_id'];
    $query = $this->db->query("
SELECT p.*, pd.* FROM `os_product` `p` LEFT JOIN `os_product_description` `pd` ON p.product_id = pd.product_id WHERE p.product_id = '$product_id'
");
    $row=$query->rows;
    echo '<pre>'; print_r($row); die; 

}
return $result;     
    }
Answer 2

ну или более оптимизированный вариант

public function get_Product_from_Att($att_id, $att_value_id) {
    $query = $this->db->query("SELECT * FROM `import_attribute_values` WHERE `id`= '$att_value_id'");
    $res = $query->row;
    $ImportAttValue = trim($res['idimport']);

    $query = $this->db->query("SELECT * FROM `os_product_attribute` WHERE `attribute_id` = '$att_id' and `text` = '$ImportAttValue'");
    $product_ids = $query->rows;
    $prodIds = '';
    foreach ($product_ids as $pid) {
        $prodIds .= $pid['product_id'] . ', ';
    }
    $res = [];
    if ($prodIds != '') {
        $prodIds = substr($prodIds, 0, -2);
        $query = $this->db->query( "SELECT p.*, pd.* FROM `os_product` `p` LEFT JOIN `os_product_description` `pd` ON p.product_id = pd.product_id WHERE p.product_id IN('{$prodIds}')" );
        $res = $query->rows;
    }
    return $res;     
}

т.е. Если $prodIds пуст, то вернется пустой массив и база дергаться вообще не будет.

READ ALSO
Особенности перехода с Smarty 2 на Smarty 3 (mysmarty.class.php)

Особенности перехода с Smarty 2 на Smarty 3 (mysmarty.class.php)

Всем привет, меняю "движок" те

226
Symfony 4 Fos User Bundle

Symfony 4 Fos User Bundle

Сделал регистрацию на FosUserBundle Symfony 41 Создал отдельный контроллер и view, регистрация работает и доступна по ссылке site/register

231
Вывести php переменную в html которая в echo

Вывести php переменную в html которая в echo

Этот html код находиться в echo, как тут правильно вывеести переменную которая $result?

225
PHP REST API Авторизация для Android

PHP REST API Авторизация для Android

Какие есть подходы для реализации авторизации на стороне PHP из Android приложенияЯ не совсем понимаю серверную часть

220