PHP-数组转换记录

来源:互联网 发布:生活大爆炸知乎 编辑:程序博客网 时间:2024/06/06 00:01

本篇博文将记录在实际的学习中为应对一些数组需要转换的问题,后续会不段更新;

第一个转换(将input框中上传的多个图片信息数组转换成可上传的图片信息数组):

实际背景:遇到在两个input框中上传多张图片的问题,第一个input框(需上传多张图片框)的name为uploadpic,第二个input框(仅上传一张图片)name为noticeCover;在表单上传之后,通过$_FILES获得这两个input的所有图片信息代码和数组格式如下:
代码:

echo "<br/>全部信息"."<pre>";       print_r($_FILES);echo "</pre>";

接收的数组格式:

Array(    [uploadpic] => Array        (            [name] => Array                (                    [0] => 1.jpg                    [1] => 2.jpg                    [2] => 3.png                )            [type] => Array                (                    [0] => image/jpeg                    [1] => image/jpeg                    [2] => image/png                )            [tmp_name] => Array                (                    [0] => /tmp/phpIZlRWu                    [1] => /tmp/php8nPbzr                    [2] => /tmp/phpgjYcco                )            [error] => Array                (                    [0] => 0                    [1] => 0                    [2] => 0                )            [size] => Array                (                    [0] => 8281                    [1] => 11837                    [2] => 67126                )        )    [noticeCover] => Array        (            [name] => book.png            [type] => image/png            [tmp_name] => /tmp/phps88Mhl            [error] => 0            [size] => 7999        ))

现在把第一个input框上传的图片信息提取出来,这个不难,用如下代码:
$a = $_FILES["uploadpic"];
显示提取第一个input框图片信息数组:

Array(    [name] => Array        (            [0] => 1.jpg            [1] => 2.jpg            [2] => 3.png        )    [type] => Array        (            [0] => image/jpeg            [1] => image/jpeg            [2] => image/png        )    [tmp_name] => Array        (            [0] => /tmp/phpIZlRWu            [1] => /tmp/php8nPbzr            [2] => /tmp/phpgjYcco        )    [error] => Array        (            [0] => 0            [1] => 0            [2] => 0        )    [size] => Array        (            [0] => 8281            [1] => 11837            [2] => 67126        ))

重点来了:提取后的数组格式也是不能直接上传的,需要在进行转换,转换后的格式如下:

Array(    [0] => Array        (            [name] => 1.jpg            [type] => image/jpeg            [tmp_name] => /tmp/phpIZlRWu            [error] => 0            [size] => 8281        )    [1] => Array        (            [name] => 2.jpg            [type] => image/jpeg            [tmp_name] => /tmp/php8nPbzr            [error] => 0            [size] => 11837        )    [2] => Array        (            [name] => 3.png            [type] => image/png            [tmp_name] => /tmp/phpgjYcco            [error] => 0            [size] => 67126        ))

刚刚用$a数组接收了第一个input框的图片信息,然后我自己写了上述数组转换的一个函数,把这个数组作为参数传入,数组转换函数代码如下:

/**arrayTransition()函数*功能:将文件上传input框中的二维数组转换成为可上传的二维数组;*参数:二维数组*返回值:二维数组*/function arrayTransition($str){    echo "函数中显示第一部分"."<pre>";    //print_r($str);    echo "</pre>";    $fileNum=count($str["name"]);    if ($fileNum==1) {        $files[0]['name']=$str['name'][0];           $files[0]['type']=$str['type'][0];           $files[0]['tmp_name']=$str['tmp_name'][0];           $files[0]['error']=$str['error'][0];           $files[0]['size']=$str['size'][0];    }else{        for ($i=0; $i < $fileNum; $i++) {             $files[$i]['name']=$str['name'][$i];               $files[$i]['type']=$str['type'][$i];               $files[$i]['tmp_name']=$str['tmp_name'][$i];               $files[$i]['error']=$str['error'][$i];               $files[$i]['size']=$str['size'][$i];        }    }    return $files;}

转换代码如下:

$a = $_FILES["uploadpic"];$files = arrayTransition($a);echo "转化后第一部分数组"."<pre>";print_r($files);       echo "</pre>";

这样,这个$files数组便可上传了!

第二个转换(将一个二维数组的一些相关信息转换成一维数组,其中一维数组键值都是这个二维数组的):

实际背景:在数据库查询到多条公告记录,每条记录包含一个公告ID(A_AnnouncementID)和发布公告的时间(A_Date)这个时间为【时间戳】,现在需要按时间顺序,越近的公告显示在设备的越靠上边;
数据库查到的原数组如下:

Array(    [0] => Array        (            [0] => 114            [A_AnnouncementID] => 114            [1] => 1502242501            [A_Date] => 1502242501        )    [1] => Array        (            [0] => 155            [A_AnnouncementID] => 155            [1] => 1502328956            [A_Date] => 1502328956        )    [2] => Array        (            [0] => 156            [A_AnnouncementID] => 156            [1] => 1502329000            [A_Date] => 1502329000        )    [3] => Array        (            [0] => 157            [A_AnnouncementID] => 157            [1] => 1502331960            [A_Date] => 1502331960        ))

转换后如下:

Array(    [1502242501] => 114    [1502328956] => 155    [1502329000] => 156    [1502331960] => 157)

再按照键(时间)大小排序,得到如下数组:

Array(    [1502331960] => 157    [1502329000] => 156    [1502328956] => 155    [1502242501] => 114)

这个是用数组遍历foreach实现的,关于这个转换实现代码部分如下:

echo "<pre>";print_r($AnnID);echo "</pre>";/*按时间顺序排列公告ID*/$changeAnnID = array();for ($i=0; $i < count($AnnID); $i++) {    $changeAnnID[$AnnID[$i]['A_Date']] = $AnnID[$i]['A_AnnouncementID'];}                echo "<pre>";print_r($changeAnnID);echo "</pre>";krsort($changeAnnID); //krsort排序函数;echo "排序后<pre>";print_r($changeAnnID);echo "</pre>";foreach ($changeAnnID as $key => $value) {    $AnnIDeach = $value;    echo $AnnIDeach."<br/>";}

通过foreach遍历,就可按照时间靠近的公告显示在设备“靠前 ”的位置啦!
注意:krsort()这类函数,返回值是true或者false,而非排序后的生成一个新的数组,它是直接对原数组进行排序,所以,排序后,打印原数组名的数组其实就是排好序后的数组!