php - How to increment php array?
问题描述
I'm working on a jQuery drop/drag game and pulling the information from a csv file such as image, year and text which is working:
$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 "];";
But where I'm stuck at is that I'm trying to create 5 new arrays using a for loop that increments the variable name and also set the year values into the arrays that has already been pulled from the 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";
}
}
What I'm looking for:
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');
But my output is:
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_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) . ";";
您可以对两个变量使用相同的循环。
推荐阅读
- python - matplotlib 在多个文件中错误地绘制
- java - Android studio 文件浏览器
- r - dplyr - 使用 rowwise() 应用自定义函数
- c# - Is it better to store a value rather than accessing it multi-dimensional array?
- android - 如何在 MySQL 中高效存储 Android 表数据
- jupyter - Geopandas 导入错误:Libncurses,Libspatialite?
- python - 如何使用 Python 语言中的名称获取 List 中的数据?
- php - 在 Symfony4 中使用 GMAIL API
- python - Change long python list with different layer with uniform one
- powershell - 如何从 dotNet.exe 命令行捕获错误