如何增加php数组?
我正在制作一个jQuery拖放游戏,并从csv文件(如图像、年份和文本)中提取信息,该文件正在工作:如何增加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
$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) . ";";