php数组和增量

我正在开发一个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 "];";

但是我遇到的问题是,我试图使用for循环创建5个新数组,以增加变量名,并将Year值设置为已经从csv中提取的数组

foreach ($rand as $r) {
    $csv = $rows[$r];
    $data = str_getcsv($csv);
    for ($i = 1; $i < 5; $i++) {
        $varToEcho = "correct_dropzone$i"; // become correct_dropzone1,correct_dropzone2,etc.
        echo "var ".$varToEcho." = new Array('".$data[0]."');\n"; 
    }   
}

我在寻找什么

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

但是我的输出是:

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');
fleia 回答:php数组和增量

您不需要嵌套循环,只需一个循环。使用循环索引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_encode()将PHP值转换为JavaScript文字,而不是手动构造它。

此外,带数字后缀的变量通常是您应该使用数组而不是单独的变量的线索。您可以将correct_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进行类似操作:

$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) . ";";

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

本文链接:https://www.f2er.com/3156300.html

大家都在问