【问题标题】:PHP to Javascript multidimensional arrayPHP 到 Javascript 多维数组
【发布时间】:2016-05-25 02:27:54
【问题描述】:

我正在尝试将 PHP 数组发送到 Javascript。

到目前为止,我只是将 Json 中的单个数组发送到我的 javascrpt ajax;

到目前为止,PHP 部分就是这样工作的;

如果我的请求有误;

$data[0] = 'false';
$data[1] = 'Error message';

如果没有错误;

$data[0] = 'OK';
$data[1] = 'html content to display';

我想发送多维数组;

 $data[0] = 'OK';
 $data[1] = 'html content to display';

 $data[1][0] = 'OK';
 $data[1][1] = 'another html content to display';

传递请求的Javascript函数;

function load(action,container){
    return new Promise(function (resolve, reject) {
        //alert(container);
        $.ajax({
            url: '/ajax.php',
            type: 'post',
            dataType: 'json',
            data: { 'query': 'true', 'action': action, 'container': container },
            success: function (data, status) {
                console.log(data[0] + ' : FOR ' + action);
                if (data[0] === 'false') {
                    $("#errorBox").addClass('visible');
                     for (var i = 1; i < data.length; i++) {
                        $('#errMsg').append(data[i]+'<br>');
                        $('#console').prepend('<span class="consoleError">ERREUR : </span>' + data[i] + '<br>');
                    }
                    $("#errorBox").show();
                }
                else if (data[0] === 'OK') {
                    resolve(data);
                    $(document).ready(function () {
                     $('#console').prepend('<span class="consoleGood"> Statue: ' + data[0] + '</span> Requête: ' + action + ' Conteneur:' +container+ '<br>');
                    data.splice(0,1);
                });
              }
                return;
            },
            error: function (xhr, desc, err) {
                console.log(xhr);
                console.log("Details: " + desc + "\nError:" + err);
                return;
            }
        }); // end ajax call
    });//promise 
};

在我使用的 PHP 部分;

$data[0]= 'OK';
$data[1]= 'some content';
$data[1][0]= 'some more content';

echo json_encode($data);

我可以得到数组第一级包含的所有数据,但第二级不能。

控制台日志显示:

"<div class="doc_css"><div class="doc_status">active</div><h1>Mon document</h1><p>Le corp de mon document</p><div class="doc_post_nfo">Originalement posté par 1 le 2016-02-13 15:25:35<div class="doc_edit">Modifier</div></div></div>"
length: 1
__proto__: Array[0]

那么我该怎么做才能得到数组的第二级呢?

【问题讨论】:

  • 发布您的 Javascript 端代码,并在 JavaScript 中对数组执行 console.log()
  • 您不能将 PHP 数组发送到 javascript。我的意思是,这是两种不同的语言。您最好的选择是将 JSON 作为您使用 PHP 解析的响应提供给您的 javascript。当您使用 javascript 发送 Ajax 请求并使用 PHP 处理它时,通常会这样做。在那里,您可以将 PHP 数组转换为 json 表示形式并将其发送回响应中。
  • 您需要阅读 AJAX 教程。并做一些谷歌搜索。将这个问题称为重复问题是一种激进的轻描淡写。
  • 我用我实际使用的代码更新了代码。
  • 这不是多维数组的工作方式。 $data[1][0]= 'some more content'; 将重写 data[1]= 'some content' 中的内容。将$data[1] 视为一个盒子,可以存储一个值'some content' 更多盒子,这将是另一个数组

标签: javascript php arrays multidimensional-array


【解决方案1】:

我运行了你的 PHP 代码并 var_dump'ed $data 变量。

<?php   
$data[0] = 'OK';
$data[1] = 'html content to display';

$data[1][0] = 'OK';
$data[1][1] = 'another html content to display';

var_dump($data);
?>

这是我得到的:

array(2) {
  [0]=>
  string(2) "OK"
  [1]=>
  string(23) "Oaml content to display"
}

所以你的数组不是多维的。还要注意第二个元素的第一个字符。猜猜发生了什么?

当您在 PHP 中创建字符串时,您可以访问单个字符,就好像该字符串是一个数组(嗯,从技术上讲,字符串是字符数组)。所以:

<?php
$str = 'abcde';
$str[2] = 'k';
// Now $str contains "abkde"
?>

所以这就是发生的事情。您更改了$data[1] 的第一个字符,然后是第二个字符。

<?php
$data[1] = 'html content to display';
$data[1][0] = 'OK';
// Now $data[1] contains "Otml content to display"
$data[1][1] = 'another html content to display';
// Now $data[1] contains "Oaml content to display"
?>

多维数组是包含数组的数组。当您使用括号表示法时,PHP 会在现场创建数组,但当然,如果变量(或数组单元)已经包含一个字符串,它会将括号解释为对单个字符的访问。

这行得通:

<?php   
$data[0][0] = 'OK';
$data[0][1] = 'html content to display';

$data[1][0] = 'OK';
$data[1][1] = 'another html content to display';

echo json_encode($data);
?>

它打印[["OK","html content to display"],["OK","another html content to display"]],Javascript代码可以在检索后解析和使用。

【讨论】:

  • 耶哈!这正在工作,我必须弄清楚我的编码,但是嘿。否则就没有乐趣了。谢谢
【解决方案2】:

我不会用这个答案重复你的整个场景,但我有同样的需要.. 将我的 PHP 数组转换为 javascript。我所做的只是使用 PHP 创建一个设置数组值的 Javascript 函数(或简单的 JS 代码)。这是一个概念性的例子。您可以根据自己的情况申请:

一、基本的PHP数组:

<?php
$a[1] = "Mike";
$a[2] = "Jim";
$a[3] = "Mark";
$a[4] = "George";
?>

要将这个数组导入 Javascript,我会执行以下操作:

<?php
print "<script type='text/javascript'>\n";
   foreach ($a as $key => $val) {
      print "a[$key] = \"".$val."\";\n";
   }
print "</script>\n";
?>

这会产生:

<script type='text/javascript'>
a[1] = "Mike";
a[2] = "Jim";
a[3] = "Mark";
a[4] = "George";
</script>

这是一种笨拙的做事方式,但它确实有效。当然,这是一个非常愚蠢/基本的示例,但它确实展示了一种将 PHP 数组导入 JS 的方法。

【讨论】:

  • json_encode 应该没有什么问题,你不应该手动编码数据结构。
  • 问题是构造多维数组的尝试是错误的,data[1] = 'something'data[1][0] = 'something else'。基本上只是修改字符串而不是添加子数组
【解决方案3】:

也许你可以通过这种方式做得更好

$data = [['code'=>true,'message'=>'Error message'],['code'=>'OK','message'=>'Other message']];

然后做

json_encode($data);

在 javascript 上你可以得到(通过 ajax 转换为 json,就像你做的那样)

data[0].code // will be true
data[1].message // will be 'Other message'

【讨论】:

  • 听起来像我需要的我会尝试一下。谢谢
猜你喜欢
  • 1970-01-01
  • 2011-01-17
  • 2012-10-07
  • 2018-09-29
  • 2019-06-13
  • 2021-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多