php - 从对象创建关联数组
问题描述
我目前有一个通过循环对象使用正确数据构建的数组,但它给出的格式不正确:
$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
})
我想获得一个结构,其中父级别是 category_code 及其名称和描述,然后是每个 item_code 和他们自己的信息,如下所示:
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)
)
})
如何修改它以创建我需要的级别,以便在导出到电子表格时正确格式化
解决方案
您需要拆分代码并在循环中初始化新对象。
考虑以下(注意代码中的注释)
$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
}
在没有看到实际数据的情况下编写这个非常困难 - 所以我想你必须修改它以适应你的数据。
但我希望你明白这一点。祝你好运!
推荐阅读
- java - 在 Android SDK 29 中管理 WiFi 网络共享
- python - 用于分类的字符串操作
- ios - iPadOS 13.4 Ble 配对弹出窗口在没有读/写受保护特征的情况下触发
- mysql - "LOAD" 在此位置对于服务器版本无效..." // 错误代码:1064。您的 SQL 语法有错误
- dart - Don't explicitly initialize variables to null
- javascript - IPFS 问题:无法使用 ipfs.add(file) 上传文件
- ios - 添加 SearchController 会导致导航栏变黑
- flutter - 使用 google_maps_flutter 检查坐标是否在颤振中的多边形内
- java - 关于图形坐标的Java问题
- python - Flask-SQLAlchemy - 当存在任何关系时尝试反映现有数据库时出现断言错误