2012-11-10 32 views
0

我正在尝试在PHP中使用图片库管理移除过程。我一直在how on如何更新列表顺序,以便在删除后保持相同的顺序。使用php更新排序?

我有一个关联数组($ images),其中键与'order'值相同,这个数字定义了库中的位置。我也有一个应该删除的订单号列表,通过用订单号识别它来删除每个图像。图像

$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"; 
} 
+0

这真是令人困惑。 – Ben

回答

1

如果你对ima的时候有控制权ges被删除,那么当时更新订单的时间会更容易。

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

    foreach ($images as $img) 
    { 
     if ($img['order'] > $removedImgNum) 
      $img['order']--; 
    } 
} 
+0

我的确想到了这一点,但希望看看是否有更好的方法,而不是每次循环列表。我只是实现了这一点,但正在寻找,看看我是否可以想出更好的选择,并认为我已与removedCounter变种。谢谢,如果我确实想到一个更好的方式,尽管列表一旦我将它作为解决方案发布在这里。 – LF4

0

不知道我理解,但也许这两个阵列,和array_diff_assoc ()比较,然后用ksort()会做你想做的排序结果。