PHP-数组转换记录

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

第一个转换(将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,而非排序后的生成一个新的数组,它是直接对原数组进行排序,所以,排序后,打印原数组名的数组其实就是排好序后的数组!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值