Получить разницу в массиве в переполнении стека

В моем сценарии список картин находится в столбце в формате json. Список картин содержит имя файла, имя картины и количество просмотров. Я хочу удалить картину в списке. Но мне не удалось. Вот мои коды:

$paintings = '[["24ef9-70076-4358c-48386.jpg","La Donna Gravida","649"],["a7972-065a9-4c0f9-723d1.jpg","Madonna and Child with the Book","1254"],["b054c-df208-0f600-e884e.jpg","Madonna del Granduca","1457"]]';
$painting = 'a7972-065a9-4c0f9-723d1.jpg';
$difference  = array_diff((array)json_decode($paintings), (array)$painting);
echo json_encode(array_values($difference));

Я пытаюсь прийти к следующему выводу: [["24ef9-70076-4358c-48386.jpg","La Donna Gravida","649"],["b054c-df208-0f600-e884e.jpg","Madonna del Granduca","1457"]] Но я получаю ошибку, как это: Notice: Array to string conversion in... Не могли бы вы помочь мне?

1

Решение

У вас нет объектов с ключами в строке json, поэтому создаваемый вами массив путем его декодирования не будет ассоциироваться с ключами. Один из возможных способов решения вашей проблемы показан ниже (прямой).

$out = array();
foreach(json_decode($paintings, true) as $p)
if (!in_array($painting, $p))
$out[] = $p;

echo json_encode(array_values($out));

По-другому

$out = array_filter(json_decode($paintings, true), function($el) use($painting) {
return !in_array($painting, $el);
});

echo json_encode(array_values($out));

Причина в том, что ["a7972-065a9-4c0f9-723d1.jpg","Madonna and Child with the Book","1254"] не является элементом с ключом или значением a7972-065a9-4c0f9-723d1.jpg — это другой массив, и вы должны проверить наличие значения во всем подмассиве или только его первого элемента. В таком случае !in_array($painting, $el) можно заменить на $painting != $el[0]

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]