【发布时间】:2018-06-18 15:35:50
【问题描述】:
我猜这是一个我从未遇到过的已知问题。我有一个多维数组通过 AJAX 发送到 PHP,如下所示:
let pd = {
vids: $.map(yt_vids_preview.find('tr:has(td :checked)'), function(el) {
let vid = $(el).data('vid');
return {
vid_id: vid.contentDetails.videoId
}; })
};
$.ajax({data: pd, url: 'foo.php', type: 'post'})
根据print_r($_POST['vids']),这是 PHP 收到的内容:
Array
(
[0] => Array
(
[vid_id] => kCkrVN7IVbo
)
[1] => Array
(
[vid_id] => dNVxfnb8fjo
)
[2] => Array
(
[vid_id] => rJEEYTzYiAE
)
)
一切都好。三个不同的视频。
现在是奇怪的。
foreach($_POST['vids'] as $arr) echo $arr['vid_id']."\n";
由于某种原因,这会输出:
kCkrVN7IVbo
dNVxfnb8fjo
dNVxfnb8fjo
其中一件物品已被复制,但价格昂贵,而另一件物品已被完全省略。我已经省略了所有其他代码,并且没有覆盖 $arr 或类似的东西。
如果我使用基本的 for() 循环,甚至像 array_walk() 这样的迭代回调函数,则不会发生这种情况:
array_walk($_POST['vids'], function($arr) { echo $arr['vid_id']."\n"; });
给予:
kCkrVN7IVbo
dNVxfnb8fjo
rJEEYTzYiAE
到底发生了什么?
【问题讨论】:
-
在你展示的代码之前你做过类似的事情吗?
foreach($vids as &$arr) $arr['vid_id'] = $something; -
@AramilRey D'oh,你是对的,虽然我没想到它会导致问题。现在发布答案...
标签: javascript php arrays ajax foreach