如何在PHP中创建二维数组,并使用Javascript进行迭代


How to create a two-dimensional array in PHP and iterate through it with Javascript

我目前正在尝试执行以下操作:

  1. 从我的image.js代码中请求一个PHP文件
  2. 在请求中调用-从我的mysql数据库中查询出数据并保存它在PHP数组中
  3. 将数组作为JSON对象返回到image.js

我已经了解了nr 1+nr 3-我正在研究的是如何将我的数据库属性正确保存到PHP数组中,然后从json回调中迭代每个记录

数据库属性示例:

player_id (unique key) || player_name || player_country || player_image || player_league ||

问题/挑战1:保存阵列(这是我不确定的)

while ($row = mysql_fetch_assoc($res))
{
    $myCallbackArray[] = array($row['player_id'], $row['player_name'], $row['player_country'], $row['player_image']);
}

-下面的数组,将只是一个没有维度的"平面数组",基于将所有相应的属性保存在单独的player_id下?

为了给出一些上下文-假设数组很好,我们在"下一步"中将其发送回JS

$callback = $myCallbackArray;
echo json_encode(array('returned_val' => $callback));

问题/挑战2:访问JS中的数组值(这是我不确定的)

      //Save the data
    var url = "request.php"; //
      var request = $.ajax({
             type: "POST",
             url: url,
             dataType: 'json',
             data: { user_id: id},
             success: function(data)
             {
//HERE WE HANDLE THE RETURNED ARRAY
if(data.returned_val) {
                  for( var i = 0; i < data.returned_val.length; i++ ){
//HERE I WOULD LIKE TO MAKE THE DIFFERENT ATTRIBUTES ACCESSABLE
                  } 
             },
             error:function() {
                //FAILURE
            }   
});
return false;

-因此,在这一部分中,我不确定如何实际处理PHP中的多维数组。我想我们需要把它保存在一个Javascript数组中,然后我们可能可以通过foreach循环迭代/访问每个值——但再说一遍——我怎么不完全确定呢?

我建议使用json_encode:

$myCallbackArray []= (object) array(
    "player_id" => '...',
    "player_name" => '...',
    "player_country" => '...',
    "player_image" => '...',
    "player_league" => '...'
);
$json = json_encode($myCallbackArray);

$json实际上如下:

[{"player_id":"...","player_name":"...","player_country":"...","player_image":"...","player_league":"..."}]

这是一个有效的JSON,您可以很容易地在javascript中使用它。

我认为你在成功函数中访问数据是错误的,数据以数组的形式返回。这里有一个例子:

var request = $.ajax({
    type: "POST",
    url: url,
    dataType: 'json',
    data: {user_id: id},
    success: function(data){
        var myval = data["returned_val"];
        alert(myval);
    },
    error:function() {
        //FAILURE
    }
});