0

画像ギャラリー管理の削除プロセスを PHP で動作させようとしています。リストの順序を更新して、削除後も同じ順序に保つ方法につまずいていました。

キーがギャラリー内の配置を定義する「順序」値と同じである連想配列 ($images) があります。削除する必要がある注文番号のリストもあります。これにより、各画像が注文番号で識別されて削除されます。

$images format

array(28) {
[1]=>
  array(5) {
    ["gallery_id"]=>
    string(2) "71"
    ["property_id"]=>
    string(1) "3"
    ["picture"]=>
    string(17) "imgname.jpg"
    ["order"]=>
    string(1) "1"
    ["alt_text"]=>
    string(14) "discription"
  }
[2]=>
  array(5) {
    ["gallery_id"]=>
    string(2) "83"
    ["property_id"]=>
    string(1) "3"
    ["picture"]=>
    string(17) "imgname.jpg"
    ["order"]=>
    string(1) "2"
    ["alt_text"]=>
    string(14) "discription"
  }
So on... how ever large the list might be.

削除する画像のリスト

$removedImgs

array(2) {
    [0]=> string(1) "1"
    [1]=> string(1) "3"
}

上記は、画像 1 と 3 がギャラリーから削除されることを示しています

Current:    1 2 3 4 5 6 ...
Removal:    2 4 5 6
            | | | |
Reordering: 1 2 3 4

実際の削除コード

// Loop though with each image and remove the ones posted from the list
foreach ($_POST['orderID'] as $removeImg)
{
    // Store each removed images order id
    $removedImgs[] = $removeImg;

    // If we're removing images create a list of the image paths to
    // unlink the files later.
    if (isset($images[$removeImg]))
    {
        $unlinkList[] = $imgPath . $images[$removeImg]['picture'];
        $unlinkList[] = $imgPath . 'thumbs/thumb' . $images[$removeImg]['picture'];
    }

    // $images should only contain the ones that we haven't removed.
    unset($images[$removeImg]);

    // Update the image order
    foreach ($images as $key => &$img)
    {
        if ($key > $removeImg)
        {
            (int)$img['order']--;
        }
    }
    var_dump($images);
    echo "\n\n==========\n\n";
}
4

2 に答える 2

1

画像がいつ削除されるかを制御できる場合は、その時点で注文を更新するのがはるかに簡単になります.

function removeImage($images, $imgName)
{
    $removedImgNum = $images[$imgName]['order'];
    $images[$imgName] = undefined; // or delete, etc

    foreach ($images as $img)
    {
        if ($img['order'] > $removedImgNum)
            $img['order']--;
    }
}
于 2012-11-10T03:35:50.793 に答える
0

よくわかりませんが、2 つの配列をarray_diff_assoc()で比較し、結果をksort()で並べ替えると、必要なことが行われる可能性があります。

于 2012-11-10T03:55:17.183 に答える