Нужна помощь по форматированию многомерного массива

У меня есть многомерный массив, в котором я хочу сгруппировать информацию о категориях категорий в один массив, а другие данные массива в соответствующие массивы.

Я пытаюсь получить данные из базы данных с помощью некоторых запросов sql, а затем объединить все данные в один массив.

$out = array();

foreach ($arr as $key => $value){
//$out[] = (object)array_merge((array)$ar[$key], (array)$value);
$out[] = array_merge((array)$ar[$key], (array)$value);
}


$tmp = array();

foreach($out as $arg)
{
foreach($arg as $arg2 )
{
   $tmp[$arg2['product_id']][] = @$arg2['category_id'];
}


}


echo "<pre>";
print_r($tmp);

Я хочу сгруппировать все категории, связанные с конкретным продуктом, в массив знаков, например идентификатор категории, имя категории, описание категории и т. д., а также данные о продукте в другой соответствующий массив.

Ниже приведен мой массив результатов, содержащий информацию о категории и данные о продукте.

 Array
 (
 [0] => Array
    (
        [product_id] => 84
        [category_id] => 1060
        [category_name] => ACMITT
        [category_descr] => 

        010010                                                                                                        

        Syn: Aegerin                                                                                              

       Skaper mot og styrke når retrett er umulig. Gir klart syn 
       og overblikk.          

       Et mineral som inneholder natrium og jern. Hardhet på 6,o 
       og egenvekt på 3,5

    )

[1] => Array
    (
        [product_id] => 84
        [category_id] => 1252
        [category_name] => A
        [category_descr] => 
    )

[2] => Array
    (
        [product_attr_id] => 1827
        [product_id] => 84
        [attribute_id] => 13
        [product_attr_value] => 

    Skaper mot og styrke når retrett er umulig. Gir klart syn og 
    overblikk. Syn: Aegerin

    )

[3] => Array
    (
        [product_attr_id] => 1819
        [product_id] => 84
        [attribute_id] => 4
        [product_attr_value] => 010010
    )

[4] => Array
    (
        [product_attr_id] => 1823
        [product_id] => 84
        [attribute_id] => 9
        [product_attr_value] => 
        http://www.steinhaugenmoss.no/avactis- 
        images/acmittkrysttynne.jpg
    )

[5] => Array
    (
        [product_attr_id] => 1816
        [product_id] => 84
        [attribute_id] => 1
        [product_attr_value] => 50.00
    )

   )

     Array
     (
        [0] => Array
     (
        [product_id] => 5583
        [category_id] => 1057
        [category_name] => Gaveartikkler
        [category_descr] => 

        Mange av våre artikkler egner seg som gaver til jubilerer 
        og annet. Her har vi plasert steinklokker, telysholdere og 
        annet som egner seg som gaver. 

    )

[1] => Array
    (
        [product_id] => 5583
        [category_id] => 1068
        [category_name] => AGAT
        [category_descr] => 

          010030                                                                                                  

         Syn: Innvielsesstein                                                                                    

         Gir deg selvrespekt mot og handlekraft. Hjelper for 
         hjertet.                    

        Er mineralet kvarts og består av silicium oksyd. Har en 
        hardhet på 7.0 og egenvekt på 2.7 Det har felt seg ut 
        kryptokrystallinsk og danner knoller av mikro kvarts 
        krystaller. Fargen kommer av metaliske forurensinger. De 
        fleste agater i handel er farget.

    )

[2] => Array
    (
        [product_attr_id] => 117306
        [product_id] => 5583
        [attribute_id] => 13
        [product_attr_value] => Gir deg selvrespekt mot og 
         handlekraft. Hjelper for hjertet. Syn: innvielsesstein
    )

[3] => Array
    (
        [product_attr_id] => 117302
        [product_id] => 5583
        [attribute_id] => 9
        [product_attr_value] => Boksttte700.jpg
    )

[4] => Array
    (
        [product_attr_id] => 117298
        [product_id] => 5583
        [attribute_id] => 4
        [product_attr_value] => 010030
    )

[5] => Array
    (
        [product_attr_id] => 117295
        [product_id] => 5583
        [attribute_id] => 1
        [product_attr_value] => 700.00
    )

)

Я хочу отформатировать этот массив, чтобы я мог создать CSV-файл этих данных для импорта в woocommerce.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
0
43
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

поправьте меня если я ошибаюсь . вы хотите создать многомерный массив, который группируется по категориям. если это так, попробуйте этот код:

$newArray = [];
foreach ($arrs as $key => $value) {

   $newArray[$value['category_name']][] = $value;
}

Привет Johnwel, Спасибо за вашу помощь, но это не может решить мою проблему. Вы можете видеть, что первые два массива с индексами [0] и [1] содержат информацию о категории, а другие массивы содержат информацию о продукте. Я хочу получить все названия категории определенного продукта, разделенные запятой или | и описание тоже будет отдельно. Кроме того, я хочу получить product_attr_value из других массивов, кроме массивов информации о категории. Надеюсь, теперь вы понимаете мою проблему. Спасибо

deadrockerrr 24.04.2019 11:47

Я хочу сгруппировать массивы, содержащие только информацию о категории, т.е. проверьте этот массив, как показано ниже: - Массив ([0] => Массив ( [product_id] => 84 [category_id] => 1060 [category_name] => ACMITT [category_descr] => 010010 Syn: Aegerin Skaper mot og styrke når retrett er umulig Gir klart syn og overblikk.Et Mineral som inneholder natrium og jern Hardhet på 6,o og egenvekt på 3,5 ) [1] => Array ( [product_id ] => 84 [category_id] => 1252 [category_name] => A [category_descr] => )

deadrockerrr 24.04.2019 11:48

Может ли кто-нибудь помочь мне решить эту проблему?

deadrockerrr 25.04.2019 07:32

Могу ли я взглянуть на исходный массив?

Johnwel Pol 25.04.2019 10:00

Привет, Джонвел, я понял свою проблему и исправил ее сейчас.

deadrockerrr 29.04.2019 12:32
Ответ принят как подходящий

Ниже приведен код о том, как я исправил свою проблему.

$final_arr = [];

foreach($out как $v) { $cat_name = array_column($v,'category_name');

$p_info = array_column($v,'product_attr_value');

$attrb_id = array_column($v,'attribute_id');

$p_id = array_column($v,'product_id');

$p_name = array_column($v,'product_name');

$c = array_combine($attrb_id, $p_info);

$final_arr[] = array(
    'pid' =>  $p_id[0],
    'product_title' => $p_name[0],
    'product_name' => $p_name[0],
    'product_desc' => $c[13],
    'post_status'  => 'publish',
    'post_author'  => 1,
    'product_type' => 'simple',
    'price' => $c[1],
    'sku' => $c[4],
    'image' => $c[9]
);
}

Я создаю массив и, используя функцию array_column, получаю значения, которые я хочу создать в конечном массиве для выполнения группового массива.

Другие вопросы по теме