繁体   English   中英

PHP:将数组分配给变量

[英]PHP: Assign array to variable

我已经尝试了很多东西来实现这一点,但它们似乎都不起作用。 我正在使用 PHP 7.4

假设我有这个:

 $othervar = array(); $var = array(1, 2, 3); $othervar = $var;

这对我不起作用, var_dump($othervar)返回

array(1) { [0]=> string(5) "Array" }

我试过使用 array_push,我不想使用 array_merge,因为我需要将两个 arrays 分配给一个变量。 这是我需要做的:

 $variable = array(); $variable["type1"] = $data; //Array 1 $variable["type2"] = $otherData; //Array 2

这也不起作用。

Barmar在这里向我展示了这行得通,所以我一定在其他地方做错了。

我将解释整个代码:

要登录我的网页,我通过 AJAX 请求发送一个请求,其中包含 jQuery。

function SendData(data, btn, actionOnSuccess, shouldReplace = false, elementToReplace = "", getServerData = true, htmlData = "") {
    if (!loading)
    {
        ToggleLoading();
        data.push({name: "action", value: $(btn).data("action")});
        data.push({name: "attr", value: JSON.stringify($(btn).data("attr"))});
        $.post("SendRequest.php", data)
            .done(function (r) {
                if (!r.success)
                    //ajax sent and received but it has an error
                else
                    //ajax sent and it was successfull
            })
            .fail(function () {
                //ajax call failed
            });
    }
    else {
        //This determines if some request is already executing or not.
    }
}

“action”和“attr”是我发送来引用系统上的一些操作的加密值(我将在这里展示更多):

代码从 AJAX 到SendRequest.php执行一个动作,比如说登录。

SendRequest.php 的第一行是:

    require "Functions.php";

    $apiAction = Decrypt($_POST["action"]); //Action
    $actionData = json_decode(Decrypt($_POST["attr"])); //Attr
    $finalPost = $_POST;
    foreach ($actionData as $key => $value) { $finalPost[$key] = $value; }

    $finalPost["loggedin_ip"] = $_SERVER['REMOTE_ADDR'];
    $result = APICall($apiAction, $finalPost);

然后,这就是我想要实现的与我的 API 通信:

function APICall($option, $data = array())
{
    session_start();
    $post = array("uData" => ArrayToAPI($_SESSION), "uPost" => ArrayToAPI($data));

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    curl_setopt($ch, CURLOPT_URL, "https://apiurl?" . $option); //option is the ACTION to perform on API (let's say "login") it is an encrypted word on a data-attr atribute on every form/button that creates a communication with API.
    $returned = curl_exec($ch);
    curl_close ($ch);
    $newData = json_decode($returned, true);
    return $newData;
}

function ArrayToAPI($array)
{
    $toApiData = array();
    foreach ($array as $key=>$value) {
        if (is_array($value))
            $toApiData[$key] = ArrayToAPI($value);
        else
            $toApiData[$key] = Encrypt($value);
    }
    return $toApiData;
}

这就是我在 API 方面所拥有的:

ob_start();
var_dump($_POST);
$result = ob_get_clean();
$api->EndRequest(false, array("errorDesc" => "a - " . $result));

function EndRequest(bool $task_completed, array $data = array())
{
    $jsonData = array();
    $jsonData['success'] = $task_completed;
    $jsonData['data'] = $data;
    header('Content-type: application/json; charset=utf-8');
    echo json_encode($jsonData, JSON_FORCE_OBJECT);
    exit;
}

这总是返回

array(2) { ["uData"]=> string(5) "Array" ["uPost"]=> string(5) "Array" }

我希望我现在更清楚了,谢谢。

问题在于由于这一行而从您的代码发出的请求:

curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 

CURLOPT_POSTFIELDS不支持多级 arrays。 您的数组值(键指向的)被转换为字符串,最终为Array 利用:

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));

.. 而是在发布请求中“正确”序列化多维 arrays(“正确”,因为有很多方法可以做到这一点,但它与预期的 PHP 格式匹配 - 用[]表示数组)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM