#php
#php
Вопрос:
У меня есть некоторые проблемы с получением значений из foreach в foreach. Итак, я получаю некоторые значения из базы данных и запрашиваю их в функции, но у этих значений есть другой foreach, поэтому мне нужно их объединить.
Итак, мой ответ, который я запрашиваю, выглядит так:
"attributes": [
{
"id": "404954fd-38c4-4865-9e0b-41588aa6b0af",
"attribute_id": "85dcb141-d0f6-4e89-872a-efb2dad156d9",
"products_id": "eb7f0faf-7bff-45e5-bdb9-a6db1e05c4f5",
"order": null,
"created_at": "2021-02-08T14:03:12.000000Z",
"updated_at": "2021-02-08T14:03:12.000000Z",
"values": [
{
"id": "427fa40e-53f2-4b69-84fe-a24e9d4a7411",
"products_id": "eb7f0faf-7bff-45e5-bdb9-a6db1e05c4f5",
"product_attributes_id": "404954fd-38c4-4865-9e0b-41588aa6b0af",
"value_id": "174eee1f-1d49-43be-b2c7-f048fa38443e",
"order": null,
"created_at": "2021-02-08T14:03:12.000000Z",
"updated_at": "2021-02-08T14:03:12.000000Z"
},
{
"id": "47338db2-1523-4972-970e-bdf491860d0d",
"products_id": "eb7f0faf-7bff-45e5-bdb9-a6db1e05c4f5",
"product_attributes_id": "404954fd-38c4-4865-9e0b-41588aa6b0af",
"value_id": "907ce021-dc66-4d85-acfb-0a11754131d4",
"order": null,
"created_at": "2021-02-08T14:03:12.000000Z",
"updated_at": "2021-02-08T14:03:12.000000Z"
},
{
"id": "b5a701ec-aea5-4651-a303-5206ee4dbcaa",
"products_id": "eb7f0faf-7bff-45e5-bdb9-a6db1e05c4f5",
"product_attributes_id": "404954fd-38c4-4865-9e0b-41588aa6b0af",
"value_id": "b3551cd3-a173-46ff-aa26-9ea294f47a65",
"order": null,
"created_at": "2021-02-08T14:03:12.000000Z",
"updated_at": "2021-02-08T14:03:12.000000Z"
}
]
},
{
"id": "5fc456c7-79c9-4689-ba29-ca81c8d5488c",
"attribute_id": "ca4fca45-c8a5-496d-a054-3d9e565594a7",
"products_id": "eb7f0faf-7bff-45e5-bdb9-a6db1e05c4f5",
"order": null,
"created_at": "2021-02-08T14:03:12.000000Z",
"updated_at": "2021-02-08T14:03:12.000000Z",
"values": [
{
"id": "4718415b-05b0-4f67-bf53-1df76c4a7ee6",
"products_id": "eb7f0faf-7bff-45e5-bdb9-a6db1e05c4f5",
"product_attributes_id": "5fc456c7-79c9-4689-ba29-ca81c8d5488c",
"value_id": "e49efb03-f89b-4528-b4a9-e052288f112a",
"order": null,
"created_at": "2021-02-08T14:03:12.000000Z",
"updated_at": "2021-02-08T14:03:12.000000Z"
},
{
"id": "e371f735-63df-4cbe-ad20-081fc6cfe3e9",
"products_id": "eb7f0faf-7bff-45e5-bdb9-a6db1e05c4f5",
"product_attributes_id": "5fc456c7-79c9-4689-ba29-ca81c8d5488c",
"value_id": "0984746e-3a7d-4767-87a0-12a2b3d0cbbf",
"order": null,
"created_at": "2021-02-08T14:03:12.000000Z",
"updated_at": "2021-02-08T14:03:12.000000Z"
}
]
},
{
"id": "a7f581aa-29b2-45b1-80df-3ccd9ea86755",
"attribute_id": "f3e2ffdd-02f5-45fc-bcd5-5c732d0783bc",
"products_id": "eb7f0faf-7bff-45e5-bdb9-a6db1e05c4f5",
"order": null,
"created_at": "2021-02-08T14:03:12.000000Z",
"updated_at": "2021-02-08T14:03:12.000000Z",
"values": [
{
"id": "2658d7f7-c91a-4f8b-a565-ef6e53e820c2",
"products_id": "eb7f0faf-7bff-45e5-bdb9-a6db1e05c4f5",
"product_attributes_id": "a7f581aa-29b2-45b1-80df-3ccd9ea86755",
"value_id": "651f2f70-58e7-4b85-b161-045d35e00dca",
"order": null,
"created_at": "2021-02-08T14:03:12.000000Z",
"updated_at": "2021-02-08T14:03:12.000000Z"
},
{
"id": "4d1a30b7-5daf-4c21-879c-93a917bb2778",
"products_id": "eb7f0faf-7bff-45e5-bdb9-a6db1e05c4f5",
"product_attributes_id": "a7f581aa-29b2-45b1-80df-3ccd9ea86755",
"value_id": "a6382c6d-87f3-416a-8400-d8ccf0385393",
"order": null,
"created_at": "2021-02-08T14:03:12.000000Z",
"updated_at": "2021-02-08T14:03:12.000000Z"
},
{
"id": "5e7e952f-eb3b-423b-9eb3-c00daa5ca103",
"products_id": "eb7f0faf-7bff-45e5-bdb9-a6db1e05c4f5",
"product_attributes_id": "a7f581aa-29b2-45b1-80df-3ccd9ea86755",
"value_id": "2e47215e-5dec-4dd2-bd26-4c0b9f09d917",
"order": null,
"created_at": "2021-02-08T14:03:12.000000Z",
"updated_at": "2021-02-08T14:03:12.000000Z"
}
]
}
]
Итак, чтобы научить их, я делаю вот так:
foreach ($product['attributes'] as $key => $attr) {
$attr_label = Attributes::where('id', $attr['attribute_id'])->firstOrFail()['label'];
foreach ($attr['values'] as $key => $value) {
$attr_value = AttributeValue::where('id', $value['value_id'])->firstOrFail()['value'];
}
}
Как вы видите, я ищу атрибут с определенным идентификатором, и после этого я ищу значения, которые назначены для этого атрибута.
Как сделать так, чтобы ответ из foreach выглядел примерно так:
{
"Size": [
"M",
"X",
"XL"
],
"Material": [
"Plastic",
"Cotton"
],
"Color": [
"Red",
"Black",
"Green"
]
}
Я попробовал что-то вроде:
$for_attributes = array();
foreach ($product['attributes'] as $key => $attr) {
$for_attributes['label'] .= Attributes::where('id', $attr['attribute_id'])->firstOrFail()['label'];
foreach ($attr['values'] as $key => $value) {
$for_attributes['value'] .= AttributeValue::where('id', $value['value_id'])->firstOrFail()['value'];
}
}
return $for_attributes;
Но он всегда говорит, как:
Исключение ErrorException: неопределенный индекс: метка в файле
Комментарии:
1. Неясно, каким вы ожидаете получить свой результат, но, похоже, вы хотите создать результирующий массив? Хотя я думаю, было бы лучше, если бы вы попытались получить именно то, что хотите, с помощью одного запроса.
2. Что бы вы ни пытались сделать, ваш код перезаписывается
$attr_label
и$attr_value
все время3. Я обновил вопрос
Ответ №1:
Хорошо, я сделал это так:
$for_attributes = array();
foreach ($product['attributes'] as $keys => $attr) {
$for_attributes[$keys]['label'] = Attributes::where('id', $attr['attribute_id'])->firstOrFail()['label'];
foreach ($attr['values'] as $key => $value) {
$for_attributes[$keys]['value'][] = AttributeValue::where('id', $value['value_id'])->firstOrFail()['value'];
}
}
return $for_attributes;