Я пытаюсь сделать простую вещь, добавив дополнительный ключ/значение для каждого элемента в моем массиве. У меня возникают трудности с этим, потому что дополнительный ключ/значение добавляется внизу, а не внутри каждого массива (ключа).
Это мой массив:
[
[{
"id": 11,
"product_id": 3,
"sku": 30000011,
"name": "BCAA 2:1:1 400g Fruit Punch",
"slug": "bcaa-211-400g-fruit-punch",
"files_id": 1397,
"image_name": "bcaa-211-400g-proteinfabrikken-1.jpg",
"image_uuid": "494bacb0-13ae-11e7-b439-adf9395810da",
"image_size": 295472,
"image_type": "image/jpeg",
"image_url": "https://d2m146bkiftioz.cloudfront.net/7-494bacb0-13ae-11e7-b439-adf9395810da/bcaa-211-400g-proteinfabrikken-1.jpg"
}, {
"id": 13,
"product_id": 3,
"sku": 30000013,
"name": "BCAA 2:1:1 400g Lemon-Lime",
"slug": "bcaa-211-400g-lemon-lime",
"files_id": 1399,
"image_name": "bcaa-211-400g-proteinfabrikken-3.jpg",
"image_uuid": "496a1420-13ae-11e7-ba90-ddc728050acd",
"image_size": 294101,
"image_type": "image/jpeg",
"image_url": "https://d2m146bkiftioz.cloudfront.net/7-496a1420-13ae-11e7-ba90-ddc728050acd/bcaa-211-400g-proteinfabrikken-3.jpg"
}]
]
Мне нужно для каждого продукта добавить номер приращения (image_number), я делаю это следующим образом:
$i = 0;
foreach($product_variants as $key => $value){
foreach($value as $keys => $values){
$product_variants[$key]['image_number'] = $i++;
}
}
Но конечный результат таков:
[{
"0": {
"id": 11,
"product_id": 3,
"sku": 30000011,
"name": "BCAA 2:1:1 400g Fruit Punch",
"slug": "bcaa-211-400g-fruit-punch",
"files_id": 1397,
"image_name": "bcaa-211-400g-proteinfabrikken-1.jpg",
"image_uuid": "494bacb0-13ae-11e7-b439-adf9395810da",
"image_size": 295472,
"image_type": "image/jpeg",
"image_url": "https://d2m146bkiftioz.cloudfront.net/7-494bacb0-13ae-11e7-b439-adf9395810da/bcaa-211-400g-proteinfabrikken-1.jpg"
},
"1": {
"id": 13,
"product_id": 3,
"sku": 30000013,
"name": "BCAA 2:1:1 400g Lemon-Lime",
"slug": "bcaa-211-400g-lemon-lime",
"files_id": 1399,
"image_name": "bcaa-211-400g-proteinfabrikken-3.jpg",
"image_uuid": "496a1420-13ae-11e7-ba90-ddc728050acd",
"image_size": 294101,
"image_type": "image/jpeg",
"image_url": "https://d2m146bkiftioz.cloudfront.net/7-496a1420-13ae-11e7-ba90-ddc728050acd/bcaa-211-400g-proteinfabrikken-3.jpg"
},
"image_number": 1
}]
Что мне нужно/хочу, так это результат:
[
[{
"id": 11,
"product_id": 3,
"sku": 30000011,
"name": "BCAA 2:1:1 400g Fruit Punch",
"slug": "bcaa-211-400g-fruit-punch",
"files_id": 1397,
"image_name": "bcaa-211-400g-proteinfabrikken-1.jpg",
"image_uuid": "494bacb0-13ae-11e7-b439-adf9395810da",
"image_size": 295472,
"image_type": "image/jpeg",
"image_url": "https://d2m146bkiftioz.cloudfront.net/7-494bacb0-13ae-11e7-b439-adf9395810da/bcaa-211-400g-proteinfabrikken-1.jpg"
"image_number": 0 <--- This
}, {
"id": 13,
"product_id": 3,
"sku": 30000013,
"name": "BCAA 2:1:1 400g Lemon-Lime",
"slug": "bcaa-211-400g-lemon-lime",
"files_id": 1399,
"image_name": "bcaa-211-400g-proteinfabrikken-3.jpg",
"image_uuid": "496a1420-13ae-11e7-ba90-ddc728050acd",
"image_size": 294101,
"image_type": "image/jpeg",
"image_url": "https://d2m146bkiftioz.cloudfront.net/7-496a1420-13ae-11e7-ba90-ddc728050acd/bcaa-211-400g-proteinfabrikken-3.jpg"
"image_number": 1 <--- This
}]
]
Нет @Keydose, я удалил его, мой плохой! API вернул массив, и я сохранил еще один плохой ход. Исправлено сейчас :) Спасибо






Пытаться:
$product_variants[$key][$keys]['image_number'] = $i++;
У вас есть массив, который выглядит так:
array(
0 => [
0 => {
"id": 11
},
1 => {
"id": 13
}
]
]
По сути, это настройка вашего многомерного массива, я включил ключи, чтобы вы могли видеть это яснее.
foreach($product_variants as $key => $value) {
// On the first iteration, $key is equal to 0, and $value is the next array.
foreach($value as $keys => $values) {
// On the first iteration, $keys is equal to 0, and $values is the data in the array.
$product_variants[$key]['image_number'] = $i++;
}
}
Итак, чтобы получить доступ к фактическим данным, нам нужно сделать следующее:
$product_variants[0][0]['data'] = 'value;
Вы пытались установить информацию в:
$product_variants[0]['data'] = 'value;
Вот почему он устанавливался в корневом массиве, а не в массиве внутри массива.
Спасибо, это сработало! Зачем мне [ключ] и [ключи], когда у меня есть два оператора foreach.
Есть способы изменить массив с помощью ключа, но я бы использовал ссылку & на открытые значения в foreach:
$i = 0;
foreach($product_variants as &$value){
foreach($value as &$values){
$values['image_number'] = $i++;
}
}
foreach со ссылкой может вызвать побочные эффекты. Используйте $index =>$value и измените индексированное значение в цикле.
Вам не нужно 2 цикла foreach(), с одним foreach() вы можете легко добавить image_number.
$array =json_decode($json,1)[0];
foreach($array as $key=>$value){
$array[$key]['image_number'] = $key;
}
print_r($array);
РАБОЧАЯ ДЕМО:https://3v4l.org/T30B1
Есть ли причина, по которой массив вариантов находится внутри массива?