如何增加php数组?

如何增加php数组?,php,arrays,Php,Arrays,我正在制作一个jQuery拖放游戏,并从csv文件(如图像、年份和文本)中提取信息,该文件正在工作: $rows = file('Book1.csv'); $len = count($rows); $rand = array(); while (count($rand) < 5) { $r = rand(0, $len); if (!in_array($r, $rand)) { $rand[] = $r; } } echo 'var cardDeck

我正在制作一个jQuery拖放游戏,并从csv文件(如图像、年份和文本)中提取信息,该文件正在工作:

$rows = file('Book1.csv');
$len = count($rows);
$rand = array();
while (count($rand) < 5) {
    $r = rand(0, $len);
    if (!in_array($r, $rand)) {
        $rand[] = $r;
    }
}
echo 'var cardDeck = [';
foreach ($rand as $r) {
    $csv = $rows[$r];
    $data = str_getcsv($csv);
    echo "{\n";
    echo "'image':'".$data[1]."',\n"; 
    echo "'year':'".$data[0]."',\n"; 
    echo "'hint':'".$data[3]."',\n"; 
    echo "'caption':'".$data[2]."'"; 
    echo "\n},\n";
}
echo "];";
但我的输出是:

var correct_dropzone1 = new Array('1845');
var correct_dropzone2 = new Array('1845');
var correct_dropzone3 = new Array('1845');
var correct_dropzone4 = new Array('1845');
var correct_dropzone1 = new Array('1835');
var correct_dropzone2 = new Array('1835');
var correct_dropzone3 = new Array('1835');
var correct_dropzone4 = new Array('1835');
var correct_dropzone1 = new Array('1586');
var correct_dropzone2 = new Array('1586');
var correct_dropzone3 = new Array('1586');
var correct_dropzone4 = new Array('1586');
var correct_dropzone1 = new Array('1912');
var correct_dropzone2 = new Array('1912');
var correct_dropzone3 = new Array('1912');
var correct_dropzone4 = new Array('1912');
var correct_dropzone1 = new Array('1822');
var correct_dropzone2 = new Array('1822');
var correct_dropzone3 = new Array('1822');
var correct_dropzone4 = new Array('1822');

您不需要嵌套循环,只需要一个循环。使用循环的索引as创建变量的数字后缀

foreach ($rand as $i => $r) {
    $csv = $rows[$r];
    $data = str_getcsv($csv);
    $varToEcho = "correct_dropzone" . ($i + 1);
    $valToEcho = json_encode(array($data[0]));
    echo "var $varToEcho = $valToEcho;\n";
}
我还展示了如何使用
json\u encode()
将PHP值转换为JavaScript文本,而不是手工构建

此外,带有数字后缀的变量通常是您应该使用数组而不是单独变量的线索。您可以使
正确的\u dropzone
成为一个数组

$dropzones = array();
foreach ($rand as $r) {
    $csv = $rows[$r];
    $data = str_getcsv($csv);
    $dropzones[] = array($data[0]);
}
echo "var correct_dropzones = " . json_encode($dropzones) . ";";
对卡片组执行类似操作:

$cardDeck = array();
foreach ($rand as $r) {
    $csv = $rows[$r];
    $data = str_getcsv($csv);
    $cardDeck[] = array(
        'image' => $data[1],
        'year' => $data[0],
        'hint' => $data[3],
        'caption' => $data[2]
    );
}
echo "var cardDeck = " . json_encode($cardDeck) . ";";

您可以对这两个变量使用相同的循环。

删除($i=1;$i<5;$i++){循环的
,而是在
foreach()
循环中使用一个变量
$i
,该循环增加(例如,在本例中,从1增加到4)。不要试图通过回显每个部分来创建JavaScript对象。创建一个包含整个内容的PHP变量,然后使用
echo json\u encode($variable);
将其转换为JS语法。@Jibstroos我应该创建另一个foreach并将其嵌套在其中或添加到现有的中?@Barmar我以前从未这样做过。你能用一个例子或网页指出正确的方向吗?非常感谢你的帮助。现在我需要了解更多关于json_编码的信息,因为我不知道这是可能的你对cardDeck的推荐很好,效果也一样,但是当我在chrome调试器上检查代码时,数组中有斜线。好奇你是说图像URL中的
\/
?请参见
$dropzones = array();
foreach ($rand as $r) {
    $csv = $rows[$r];
    $data = str_getcsv($csv);
    $dropzones[] = array($data[0]);
}
echo "var correct_dropzones = " . json_encode($dropzones) . ";";
$cardDeck = array();
foreach ($rand as $r) {
    $csv = $rows[$r];
    $data = str_getcsv($csv);
    $cardDeck[] = array(
        'image' => $data[1],
        'year' => $data[0],
        'hint' => $data[3],
        'caption' => $data[2]
    );
}
echo "var cardDeck = " . json_encode($cardDeck) . ";";