Создание ассоциативного массива из объекта - PullRequest
0 голосов
/ 17 января 2019

У меня в настоящее время есть массив, который строит с правильными данными, зацикливая объект, но он дает неправильный формат:

$priceResult = array();

foreach($prices->categories as $category){ 

    $priceResult[] = $category->category_name;
    $priceResult[] = $category->category_desc;
    $priceResult[] = $category->category_code;

    foreach($category->products as $product){

        $priceResult[] = $product->product_info->item->item_code;

        foreach ($product->product_info->details as $details) {

            $priceResult[] = $details->description;
            $priceResult[] = $details->color;
            $priceResult[] = $details->sector;
        }

        $priceResult[] = $product->product_info->code;
        $priceResult[] = $product->product_info->item->description;
        $priceResult[] = $product->product_info->item->item_type->quantity;

        foreach(get_object_vars($product->prices) as $amount){

            $priceResult[] = $amount;

        }
    }
}

Хотя это не ассоциативно.

Итак, в настоящее время, скажем, у меня есть одна категория с двумя продуктами, тогда все они распечатываются как один массив

array({
    1:category_name
    2:category_desc
    3:category_code
    4:item_code
    5:description
    6:color
    7:sector
    8:code
    9:description
    10:quantity
    11:amount
    12:item_code
    13:description
    14:color
    15:sector
    16:code
    17:description
    18:quantity
    19:amount
})

Я хотел бы получить структуру, где родительским уровнем является код категории с его именем и описанием, а затем каждый код элемента и его собственная информация, например:

array({
    category_name
    category_desc
    category_code
      Array(
       1: item_code array(
            details array(
                description
                color
                sector
            )
            code
            description
            quantity
            amount) 
       2: item_code array(
            details array(
                description
                color
                sector
            )
            code
            description
            quantity
            amount) 
 ) 
})

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

1 Ответ

0 голосов
/ 17 января 2019

Вам нужно разделить ваш код и инициировать новый объект в цикле.

Примите во внимание следующее (обратите внимание на комментарий в коде)

$allCategoryResult= array(); // init at first - notice naming as category and not prices

foreach($prices->categories as $category){ 
    $categoryItem = array(); // as current category to populate

    // give name to the keys and not just numbers
    $categoryItem["name"] = $category->category_name; 
    $categoryItem["desc"] = $category->category_desc;
    $categoryItem["code"] = $category->category_code;

    foreach($category->products as $product){
        $productItem = array(); // new product, so init new array for him

        // fill all the item data with name - maybe you will need to fix the paths here
        $productItem["details"] = array(); // init empty array for all the details elements
        foreach ($product->product_info->details as $details) {
            $detailsItem = array(); // init details array for each detail element
            $detailsItem["description"] = $details->description;
            $detailsItem["color"] = $details->color;
            $detailsItem["sector"] = $details->sector;
            $productItem["details"][] = $detailsItem; // add the detail element to the product array
        }

        $productItem["code"] = $product->product_info->code;
        $productItem["itemDescription"] = $product->product_info->item->description;
        $productItem["quantity"] = $product->product_info->item->item_type->quantity;
        $productItem["amount"] = get_object_vars($product->prices);

        $itemCode = $product->product_info->item->item_code;
        categoryItem[$itemCode] = $productItem; // add the product to category array by his code
    }
    $allCategoryResult[] = $categoryItem; //add the category to all category array
}

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

Но я надеюсь, вы поняли идею.Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...