无法对 php 中数组的第 0 个元素进行编码
Cannot encode 0th element of array in php
我正在编写一个 php 脚本,用于多个文件上传并从服务器获取上传文件的 json 数据。但是,json 响应并未达到应有的状态
php 脚本
$con= new mysqli('localhost','root','','app');
$name='Dp User id ';
if(!empty($_FILES['files']['name'])&&!empty($_POST['id']))
{
$id=$_POST['id'];
$files=$_FILES['files'];
$response=array();
$uploaded=array();
$failed=array();
$allowed=array('txt','jpeg','sig','pak','dll','jpg');
foreach($files['name'] as $position=>$file_name)
{
$file_tmp=$files['tmp_name'][$position];
$file_size=$files['size'][$position];
$file_error=$files['error'][$position];
$file_ext1=explode('.', $file_name);
$file_ext=strtolower(end($file_ext1));
if(in_array($file_ext,$allowed))
{
if($file_error===0)
{
if($file_size<=2097152)
{
$file_name_new=$name.$id.'.'.$file_ext;
$upload_url = $_SERVER['DOCUMENT_ROOT'].'/app2/User Files/User Id-'.$id.'/';
$file_destination=$upload_url.$file_name_new;
$Sql_Query = $con -> prepare("UPDATE profile SET pic= ? WHERE id = ?");
$Sql_Query -> bind_param("si", $file_destination,$id);
$sql = $Sql_Query -> execute();
if(move_uploaded_file($file_tmp,$file_destination))
{
//$uploaded[$position]=$file_destination.'<br>';
array_push($uploaded,array($position=>$file_destination.'<br>'));
}else{
$failed[$position]="[{$file_name}] failed to upload".mysqli_error($con).'<br>';
}
}else{
$failed[$position]="[$file_name] is too large.".mysqli_error($con).'<br>';
}
}else{
$failed[$position]="[$file_name] has error {$file_error}".mysqli_error($con).'<br>';
}
}else{
$failed[$position]="[$file_name] has {$file_ext} which is not allowed".mysqli_error($con).'<br>';
}
}
if(!empty($uploaded))
{
echo (json_encode(array(
"success"=>1,
"message" => $uploaded)));
}
if(!empty($failed))
{
echo json_encode(array(
"success" => 0,
"message" => $failed));
}
}
mysqli_close($con);
?>
我希望 json 像这样返回此脚本
{"success":1,
"message":[{"C:\/Apache24\/htdocs\/app2\/User Files\/User Id-94\/Dp User id 94.jpg
"},
{"1":"C:\/Apache24\/htdocs\/app2\/User Files\/User Id-94\/Dp User id 94.jpg
"},
{"2":"C:\/Apache24\/htdocs\/app2\/User Files\/User Id-94\/Dp User id 94.jpg
"}]}
但是json是这样的
{"success":1,
"message":[["C:\/Apache24\/htdocs\/app2\/User Files\/User Id-94\/Dp User id 94.jpg
"],
{"1":"C:\/Apache24\/htdocs\/app2\/User Files\/User Id-94\/Dp User id 94.jpg
"},
{"2":"C:\/Apache24\/htdocs\/app2\/User Files\/User Id-94\/Dp User id 94.jpg
"}]}
第 0 个元素在数组之间,我希望它像其他元素一样在对象之间。每当我选择文件并上传它时,第 0 个总是在 response.Any 帮助中以这样的方式结束,将不胜感激
提前致谢
php 具有从 0
开始的整数键(包括隐式转换字符串)的数组被编码为 JSON 数组而不是 JSON 对象。同时 php 带有字符串键或整数键 不是从 0 开始的数组(我认为这就是你的情况)将被 [=12= 编码为 JSON 对象].
对于你的情况,你有两个选择:
如果您希望输出包含所有对象而不是第一个 (0) 的数组
元素,只需在推送元素时将 $position
变量增加 1
进入您的 $uploaded
和 $failed
数组:
array_push($uploaded,array($position+1=>$file_destination.'<br>'));
^^
$failed[$position+1]=...
^^
这当然会在您的 JSON 输出中产生基于 1 而不是基于零的列表。
或者,您也可以将 JSON_FORCE_OBJECT
作为第二个参数传递给 json_encode
,但这将摆脱 message
...[= 的外部数组20=]
我正在编写一个 php 脚本,用于多个文件上传并从服务器获取上传文件的 json 数据。但是,json 响应并未达到应有的状态
php 脚本
$con= new mysqli('localhost','root','','app');
$name='Dp User id ';
if(!empty($_FILES['files']['name'])&&!empty($_POST['id']))
{
$id=$_POST['id'];
$files=$_FILES['files'];
$response=array();
$uploaded=array();
$failed=array();
$allowed=array('txt','jpeg','sig','pak','dll','jpg');
foreach($files['name'] as $position=>$file_name)
{
$file_tmp=$files['tmp_name'][$position];
$file_size=$files['size'][$position];
$file_error=$files['error'][$position];
$file_ext1=explode('.', $file_name);
$file_ext=strtolower(end($file_ext1));
if(in_array($file_ext,$allowed))
{
if($file_error===0)
{
if($file_size<=2097152)
{
$file_name_new=$name.$id.'.'.$file_ext;
$upload_url = $_SERVER['DOCUMENT_ROOT'].'/app2/User Files/User Id-'.$id.'/';
$file_destination=$upload_url.$file_name_new;
$Sql_Query = $con -> prepare("UPDATE profile SET pic= ? WHERE id = ?");
$Sql_Query -> bind_param("si", $file_destination,$id);
$sql = $Sql_Query -> execute();
if(move_uploaded_file($file_tmp,$file_destination))
{
//$uploaded[$position]=$file_destination.'<br>';
array_push($uploaded,array($position=>$file_destination.'<br>'));
}else{
$failed[$position]="[{$file_name}] failed to upload".mysqli_error($con).'<br>';
}
}else{
$failed[$position]="[$file_name] is too large.".mysqli_error($con).'<br>';
}
}else{
$failed[$position]="[$file_name] has error {$file_error}".mysqli_error($con).'<br>';
}
}else{
$failed[$position]="[$file_name] has {$file_ext} which is not allowed".mysqli_error($con).'<br>';
}
}
if(!empty($uploaded))
{
echo (json_encode(array(
"success"=>1,
"message" => $uploaded)));
}
if(!empty($failed))
{
echo json_encode(array(
"success" => 0,
"message" => $failed));
}
}
mysqli_close($con);
?>
我希望 json 像这样返回此脚本
{"success":1,
"message":[{"C:\/Apache24\/htdocs\/app2\/User Files\/User Id-94\/Dp User id 94.jpg
"},
{"1":"C:\/Apache24\/htdocs\/app2\/User Files\/User Id-94\/Dp User id 94.jpg
"},
{"2":"C:\/Apache24\/htdocs\/app2\/User Files\/User Id-94\/Dp User id 94.jpg
"}]}
但是json是这样的
{"success":1,
"message":[["C:\/Apache24\/htdocs\/app2\/User Files\/User Id-94\/Dp User id 94.jpg
"],
{"1":"C:\/Apache24\/htdocs\/app2\/User Files\/User Id-94\/Dp User id 94.jpg
"},
{"2":"C:\/Apache24\/htdocs\/app2\/User Files\/User Id-94\/Dp User id 94.jpg
"}]}
第 0 个元素在数组之间,我希望它像其他元素一样在对象之间。每当我选择文件并上传它时,第 0 个总是在 response.Any 帮助中以这样的方式结束,将不胜感激
提前致谢
php 具有从 0
开始的整数键(包括隐式转换字符串)的数组被编码为 JSON 数组而不是 JSON 对象。同时 php 带有字符串键或整数键 不是从 0 开始的数组(我认为这就是你的情况)将被 [=12= 编码为 JSON 对象].
对于你的情况,你有两个选择:
如果您希望输出包含所有对象而不是第一个 (0) 的数组 元素,只需在推送元素时将
$position
变量增加1
进入您的$uploaded
和$failed
数组:array_push($uploaded,array($position+1=>$file_destination.'<br>')); ^^ $failed[$position+1]=... ^^
这当然会在您的 JSON 输出中产生基于 1 而不是基于零的列表。
或者,您也可以将
JSON_FORCE_OBJECT
作为第二个参数传递给json_encode
,但这将摆脱message
...[= 的外部数组20=]