以新聞做爲例子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');
二、編輯
編輯和添加略有差別,主要是圖片的處理,由於若是編輯沒有修改圖片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' ); } }