Как я могу удалить ключ объекта массива и сохранить их как массив? - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть этот массив объектов, и мне нужно удалить ключ "0":

 "images": [
        {
            "0": "http://example.test/uploads/products/jqGfPyIUc_Wd.jpg"
        },
        {
            "0": "http://example.test/uploads/products/bC1UIM5WwT8f.jpeg"
        }
    ],

мой код:

'images' => $this->images->map(function($item){ 

      return (object)[$item->image_path];

 }),

Мне нужно удалить ключи и сохранить его как массив вроде этого:

 "images": [
        {
            "http://example.test/uploads/products/jqGfPyIUc_Wd.jpg"
        },
        {
            "http://example.test/uploads/products/bC1UIM5WwT8f.jpeg"
        }
    ],

Ответы [ 3 ]

2 голосов
/ 09 апреля 2020

Свойства объекта всегда должны иметь ключ. если вы не хотите, чтобы он имел ключ, вы должны вместо этого сохранить его как вложенный массив:

'images' => $this->images->map(function($item){ 
      return array($item->image_path);
 }),

// will create:

 "images": [
        [
            "http://example.test/uploads/products/jqGfPyIUc_Wd.jpg"
        ],
        [
            "http://example.test/uploads/products/bC1UIM5WwT8f.jpeg"
        ]
    ],

или просто сопоставить его со строковыми значениями и сохранить как стандартный массив:

'images' => $this->images->map(function($item){ 
      return $item->image_path;
 }),

// will create:

 "images": [
        "http://example.test/uploads/products/jqGfPyIUc_Wd.jpg",
        "http://example.test/uploads/products/bC1UIM5WwT8f.jpeg"
    ],
0 голосов
/ 09 апреля 2020

Этот массив выглядит как javascript. Если это так, вы можете отобразить его следующим образом.

console.log(images);
/*
[
    {'0': 'http://example.test/uploads/products/jqGfPyIUc_Wd.jpg'},
    {'0': 'http://example.test/uploads/products/bC1UIM5WwT8f.jpeg'}
]
*/
console.log(images.map(value => value[0]));
/*
[
    'http://example.test/uploads/products/jqGfPyIUc_Wd.jpg',
    'http://example.test/uploads/products/bC1UIM5WwT8f.jpeg'
]
*/

Если это массив php, похоже, что он поступил из вызова json_decode. Вы можете map это.

var_dump($images)
/*
[
    {#3145
        +"0": "http://example.test/uploads/products/jqGfPyIUc_Wd.jpg",
    },
    {#3142
        +"0": "http://example.test/uploads/products/bC1UIM5WwT8f.jpeg",
    },
]
*/
var_dump(array_map(function($value) { return $value->{'0'}; }, $images));
/*
[
    'http://example.test/uploads/products/jqGfPyIUc_Wd.jpg',
    'http://example.test/uploads/products/bC1UIM5WwT8f.jpeg'
]
*/
# PHP >= 7.4
var_dump(array_map(fn($value) => $value->{'0'}, $images));
/*
[
    'http://example.test/uploads/products/jqGfPyIUc_Wd.jpg',
    'http://example.test/uploads/products/bC1UIM5WwT8f.jpeg'
]
*/
0 голосов
/ 09 апреля 2020

Попробуй так:

 'images' => $this->images->map(function($item){ 

      return collect((object)[$item->image_path])->values();

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