PHP處理從HTML接收的圖、文數據並進行有序混排

以新聞做爲例子php

問題:新聞內容有標題(title)、圖片(image)、文字(content)三種數據存在形式,我從HTML獲取的數據是三組數組:title[]、image[]、content[];這三個數組的元素須要按順序存進paragraphs[]中。數據庫

解決方案:
一、添加:
(1)在HTML中建立id=」paragraph_list」的div塊,添加的內容class=」paragraphs」,id=」paragraph’+i+'」,其中變量i的值爲:
json

            if($('.paragraphs').length === 0) {
                var i = 0;
            } else {
                var last = $('.paragraphs').last().attr('id');
                var i = parseInt(last.substring(9, last.length));
                i = i + 1;
            }


在#paragraphs塊裏添加一個type=」hidden」,name=」xxxOrder[]」,value=」」‘+i+'」」的input輸入框。添加的時候在#paragraph_list最後一條子元素後面插入最新的#paragraphs
(2)php獲取六組數組:$newsTitleOrder、$newsTitle、$newsContentOrder、$newsContent、$newsImageOrder、$files,進行以下處理:
數組

        $news_image = array();
        for($i = 1; $i < sizeof($files); $i ++) {
            $imageId = $imageLogic->uploadImage($files[$i], 'news');
            $news_image[] = array(
                $newsImageOrder[$i-1] => $imageId,
                'type' => 'image'
            );
            unset($imageId);
        }

        $news_title = array();
        for($i = 0; $i < sizeof($newsTitle); $i ++) {
            $news_title[] = array(
                $newsTitleOrder[$i] => $newsTitle[$i],
                'type' => 'title'
            );
        }

        $news_content = array();
        for($i = 0; $i < sizeof($newsContent); $i ++) {
            $news_content[] = array(
                $newsContentOrder[$i] => $newsContent[$i],
                'type' => 'text'
            );
        }

        $arrMerge = array_merge($news_title, $news_content, $news_image);


合併後的數組是無序的,我須要根據數組中子元素的第一個子元素的key進行排序,並且這個key可能不是連續的,由於編輯在添加的過程當中可能會把前面已經添加上的內容刪除了,多維數組的排序處理以下:
spa

    public function compare($arr1, $arr2) {
        $index1 = array_keys($arr1)[0];
        $index2 = array_keys($arr2)[0];
        if($index1 <= $index2) {
            return false;
        } else {
            return true;
        }
    }
    usort($arrMerge, 'compare');



這下我就能獲得我但願獲得的結果了
code

二、編輯
編輯和添加略有差別,主要是圖片的處理,由於若是編輯沒有修改圖片PHP接收的$files對應的元素爲空,關鍵在於如何對數據庫中原有圖片進行取捨
(1)HTML展現原有圖片的時候,須要php把原有圖片id傳遞過來:
orm

        $paragraphs = json_decode($paragraphs);
        $paragraph  = array();
        foreach($paragraphs as $list) {
            if($list->type == 'image') {
                $paragraph[] = array(
                    'id'      => $list->id,
                    'type'    => $list->type,
                    'content' => $imageLogic->getImageUrl($list->id)
                );
            } else {
                $paragraph[] = array(
                    'type'    => $list->type,
                    'content' => $list->content
                );
            }
        }


在圖片的.paragraphs塊裏添加type=」hidden」,name=」oldImageId[]」,vlaue={{原有圖片id}}的input輸入框
(2)php接收的時候會多一個數組$oldImageId,建立新圖片數組的時候只要加一個判斷:
blog

        $news_image = array();
        for($i = 1; $i < sizeof($files); $i ++) {
            if($files[$i]->getName()) {
                $news_image[] = array(
                    $newsImageOrder[$i-1] => $imageLogic->uploadImage($files[$i], 'news'),
                    'type' => 'image'
                );
            } else {
                $news_image[] = array(
                    $newsImageOrder[$i-1] => $oldImageId[$i-1],
                    'type' => 'image'
                );
            }
        }


其餘的與添加一致
排序

相關文章
相關標籤/搜索