1

私のシナリオでは、絵画のリストは 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...助けていただけますか?

4

1 に答える 1

2

json 文字列にキーを持つオブジェクトがないため、デコードして作成した配列はキーに関連付けられません。問題を解決する可能な方法の 1 つを以下に示します (単純な方法)。

$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]

于 2014-10-26T19:34:53.100 に答える