我的代码已通过$ _FILES数组并取消设置了许多文件。现在,阵列的键不会从零开始,也不按顺序排列。
[userfile] => Array
(
[name] => Array
(
[2] => IMG_20170325_124043610_HDR.jpg
[3] => video_icon.png
[5] => watersports.gif
[7] => IMG_20170325_153726906_HDR.jpg
)
我想从零开始按顺序重命名键,如下所示:
[userfile] => Array
(
[name] => Array
(
[0] => IMG_20170325_124043610_HDR.jpg
[1] => video_icon.png
[2] => watersports.gif
[3] => IMG_20170325_153726906_HDR.jpg
)
我不想更改[userfile] [name]或任何其他非数字键的键值。这有功能吗?我想沿着这些方向做点什么:
// FILE COUNT IS PROVIDED BY CODE ABOVE
// Is $num equal to $fileCount?
$num = 0;
// Change the value of the key through iteration
while ($num < $fileCount) {
// need a built in function that allows the key change
**reset_key**($_FILES['userfile']['name'][$num]);
**reset_key**($_FILES['userfile']['type'][$num]);
**reset_key**($_FILES['userfile']['tmp_name'][$num]);
**reset_key**($_FILES['userfile']['error'][$num]);
**reset_key**($_FILES['userfile']['size'][$num]);
}
$num++;
这是否是正确的方法,还是我应该在这里尝试别的东西?非常感谢您的投入!
干杯,
沙克尔顿
答案 0 :(得分:0)
无需重置密钥。您可以使用简单的$_FILES
foreach迭代key => value
数据,并使用与其他子数组相同的key
获取值:
foreach ($_FILES['userfile']['name'] as $key => $value) {
echo 'Name: ', $value;
echo 'Tmp_name: ',$_FILES['userfile']['tmp_name'][$key];
echo 'Size: ', $_FILES['userfile']['size'][$key];
}
如果您仍想重置子数组的键,请使用array_values
,但要注意 - 您需要重置$_FILES['userfile']
的所有子数组中的值:name
,{{1 }},tmp_name
,error
,size
。
答案 1 :(得分:0)
使用array_values()
代码:
<?php
$file= array(
$arr1 = array
(
23 => 'IMG_20170325_124043610_HDR.jpg',
4 => 'video_icon.png',
55 => 'watersports.gif',
7 => 'IMG_20170325_153726906_HDR.jpg'
),
$arr2 = array
(
23 => 'IMG_20170325_124043610_HDR.jpg',
43 => 'video_icon.png',
54 => 'watersports.gif',
7 => 'IMG_20170325_153726906_HDR.jpg'
)
);
for ($i=0; $i<count($file); $i++){
$arr=$file[$i];
$arr= array_values($arr);
sort($arr);
foreach ($arr as $key => $val) {
echo "$key = $val\n";
}
}
?>
答案 2 :(得分:0)
array_walk() array_values()单行救援:
array_walk($FILES,function(&$v){$v["userfile"]["name"]=array_values($v["userfile"]["name"]);});
array_walk()
细分:
array_walk(
// changed $_FILES to $FILES for testing only
$FILES, // this is the input array to iterate
function(&$v){ // $v is each 1st level subarray in $FILES
// ^-- & means alter each original subarray from $FILES
$v["userfile"]["name"]= // only redeclare/overwrite the subarray's subarray called "name"
array_values($v["userfile"]["name"]); // create a new array with zero-indexed keys and the same values as the original subarray's subarray
}
);
如果您将此数组用作输入:
$FILES=array(
array(
"userfile" => array(
"name" => array(
2 => "IMG_20170325_124043610_HDR.jpg",
3 => "video_icon.png",
5 => "watersports.gif",
7 => "IMG_20170325_153726906_HDR.jpg"
)
)
),
array(
"userfile" => array(
"name" => array(
9 => "IMG_20170325_124043610_HDR.jpg",
13 => "video_icon.png",
55 => "watersports.gif",
97 => "IMG_20170325_153726906_HDR.jpg"
)
)
),
array(
"userfile" => array(
"name" => array(
1 => "IMG_20170325_124043610_HDR.jpg",
88 => "video_icon.png",
7 => "watersports.gif",
10 => "IMG_20170325_153726906_HDR.jpg"
)
)
)
);
在array_walk()
之后,var_export($FILES);
将输出:
array (
0 =>
array (
'userfile' =>
array (
'name' =>
array (
0 => 'IMG_20170325_124043610_HDR.jpg',
1 => 'video_icon.png',
2 => 'watersports.gif',
3 => 'IMG_20170325_153726906_HDR.jpg',
),
),
),
1 =>
array (
'userfile' =>
array (
'name' =>
array (
0 => 'IMG_20170325_124043610_HDR.jpg',
1 => 'video_icon.png',
2 => 'watersports.gif',
3 => 'IMG_20170325_153726906_HDR.jpg',
),
),
),
2 =>
array (
'userfile' =>
array (
'name' =>
array (
0 => 'IMG_20170325_124043610_HDR.jpg',
1 => 'video_icon.png',
2 => 'watersports.gif',
3 => 'IMG_20170325_153726906_HDR.jpg',
),
),
),
)