一起合并到数组

时间:2017-04-14 15:56:42

标签: php arrays merge image-uploading

我正在尝试合并到数组。至少我所知道的是两个阵列。但是PHP返回错误,说第一个不是数组。

我的最终目标是上传图像,然后在我的文本文件中获取现有数据,将新结果附加到现有数据的末尾,然后将其全部写回数据库。这样,每次上传新图像时都不会覆盖文件,因此您可以继续上传越来越多的图像。

这是我的php:

<?php
$sFileName = "imgDB.txt";
$temp = "temp.txt";

for($i=0 ; $i < count($_FILES) ; $i++){
move_uploaded_file( $_FILES['file-'.$i]['tmp_name'] , "img/". $_FILES['file-
'.$i]['name'] );
}


// Get the content of the file!
$sImgs = file_get_contents($sFileName); //gets a string from the file.
$ajImgs = json_decode($sImgs); //converts the string to an array.


$aOutPut = array_merge ($ajImgs, $_FILES);

$aSendToFile = json_encode($aOutPut, JSON_PRETTY_PRINT | 
JSON_UNESCAPED_UNICODE);
file_put_contents($sFileName, $aSendToFile);

2 个答案:

答案 0 :(得分:1)

问题可能在这里:

$ajImgs = json_decode($sImgs);

默认情况下,json_decode()返回一个对象。如果你想要一个数组,你可以传递布尔true作为可选的第二个参数:

$ajImgs = json_decode($sImgs,1);

来自docs

  

<强> ASSOC

     

当为TRUE时,返回的对象将被转换为关联数组。

但是,如果文件“imgDB.txt”为空,您可能还会从false返回布尔值json_decode(),因此您可以检查确保您有一个这样的数组:< / p>

$ajImgs = json_decode($sImgs,1) ?: array();

这是:

的简写
if (json_decode($sImgs,1) != false) {
    $ajImgs = json_decode($sImgs,1);
} else {
    $ajImgs = array();
}

<强>更新

要解决json中覆盖的图像,同时仍然避免欺骗我建议使用文件名作为密钥构建一个新数组:

// initialize a new array for use below
$files = array();
for($i=0 ; $i < count($_FILES) ; $i++){
    /* for some reason your application posts some empty files
       without going to deep into the javascript side,
       here is a simple way to ignore those */
    if (empty($_FILES['file-'.$i]['size'])) continue; 
    move_uploaded_file( $_FILES['file-'.$i]['tmp_name'] , "img/". $_FILES['file-'.$i]['name'] );

    // now we build a new array using filenames as array keys
    $files[$_FILES['file-'.$i]['name']] = $_FILES['file-'.$i];

    // if you don't care about dupes you can use a numeric key like this
    // $files[] = $_FILES['file-'.$i];
}

// now do your merge with this new array
$aOutPut = array_merge ($ajImgs, $files);

以上内容已经过测试,对我有用。可能有更好的方法来解决这个问题,例如将文件直接添加到解码的json ,但重写整个应用程序超出了这个问题的范围。

答案 1 :(得分:0)

您需要为json_decode()添加第二个参数。

$ajImgs = json_decode($sImgs, true);