本篇博文将记录在实际的学习中为应对一些数组需要转换的问题,后续会不段更新;
第一个转换(将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,而非排序后的生成一个新的数组,它是直接对原数组进行排序,所以,排序后,打印原数组名的数组其实就是排好序后的数组!