PHP处理从HTML接收的图、文数据并进行有序混排

以新闻作为例子

问题:新闻内容有标题(title)、图片(image)、文字(content)三种数据存在形式,我从HTML获取的数据是三组数组:title[]、image[]、content[];这三个数组的元素需要按顺序存进paragraphs[]中。

解决方案:
1、添加:
(1)在HTML中创建id=”paragraph_list”的div块,添加的内容class=”paragraphs”,id=”paragraph’+i+'”,其中变量i的值为:

            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可能不是连续的,因为编辑在添加的过程中可能会把前面已经添加上的内容删除了,多维数组的排序处理如下:

    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');



这下我就能得到我希望得到的结果了

2、编辑
编辑和添加略有差异,主要是图片的处理,因为如果编辑没有修改图片PHP接收的$files对应的元素为空,关键在于如何对数据库中原有图片进行取舍
(1)HTML展示原有图片的时候,需要php把原有图片id传递过来:

        $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,创建新图片数组的时候只要加一个判断:

        $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'
                );
            }
        }


其他的与添加一致


转载于:https://my.oschina.net/jihan19921016/blog/494887

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值