我正在尝试了解多维数组,并故意构建以下名为$answerStringArray
的数组来练习:
array(4) {
[0] => array(1) {
[0] => array(3) {
[0] => string(8) "Swimming"
[1] => string(7) "Burgers"
[2] => string(3) "Bob"
}
}[1] => array(1) {
[0] => array(3) {
[0] => string(7) "Running"
[1] => string(5) "Chips"
[2] => string(4) "Paul"
}
}[2] => array(1) {
[0] => array(3) {
[0] => string(7) "Jogging"
[1] => string(5) "Salad"
[2] => string(5) "David"
}
}[3] => array(1) {
[0] => array(3) {
[0] => string(7) "Walking"
[1] => string(5) "Sauce"
[2] => string(5) "Frank"
}
}
}
我正在尝试构建一个循环wherby,我可以回显值
Swimming
Running
Jogging
Walking
在第一次迭代后跟
Burgers
Chips
Salad
Sauce
等等
我很感激我可以写array[0][0][0];
来打印游泳等等,但我想了解如何循环以获得所需的数据。
我尝试过使用如下所示的循环,但它开始变得不同步,然后我意识到这可能是一个不好的方法来尝试做我想要的事情:
$arrayLength = count($answerStringArray);
for($x = 0; $x <= $arrayLength; $x++){
for ($y =0; $y<=$x; $y++) {
for ($z =0; $z<=$y; $z++) {
echo $answerStringArray[$x][$y][$z];
}
}
}
答案 0 :(得分:1)
我很感激我可以写数组[0] [0] [0];打印游泳等等,但我想了解如何循环以获得所需的数据。
这正是你能理解的方式。您只需按照要在屏幕上查看元素的顺序收集数组索引:
Swimming -- [0][0][0]
Running -- [1][0][0]
Jogging -- [2][0][0]
Walking -- [3][0][0]
Burgers -- [0][0][1]
Chips -- [1][0][1]
Salad -- [2][0][1]
Sauce -- [3][0][1]
Bob -- [0][0][2]
Paul -- [1][0][2]
David -- [2][0][2]
Frank -- [3][0][2]
然后你可以查看索引并查看模式:要创建组,你必须在第一个索引处循环0 ... 3:
for($x = 0; $x <= 3; $x++){
echo $answerStringArray[$x][0][0] . "\n";
} // ^
echo "\n";
for($x = 0; $x <= 3; $x++){
echo $answerStringArray[$x][0][1] . "\n";
} // ^
echo "\n";
for($x = 0; $x <= 3; $x++){
echo $answerStringArray[$x][0][2] . "\n";
} // ^
然后你可以使用标记的索引,它似乎从0..2开始,每组一步。所以将整个事物包装成一个外循环:
for($z = 0; $z <= 2; $z++){
for($x = 0; $x <= 3; $x++){
echo $answerStringArray[$x][0][$z] . "\n";
}
echo "\n";
}
然后你可以摆脱硬编码的数字,并在代码开始时使用count()
:
$xcount = count($answerStringArray);
$zcount = count($answerStringArray[0][0]); // here we assume that all arrays look the same!
for($z = 0; $z < $zcount; $z++){ // "<= maxindex" became the more common "< size"
for($x = 0; $x < $zcount; $x++){ // also here
echo $answerStringArray[$x][0][$z] . "\n";
}
echo "\n";
}
然后我们可以添加中间索引的用法,并消除额外的换行符(echo "\n";
行已经在末尾产生了一个不需要的空行,并且很快引入了$y
- 循环在块之间做同样的事情):
$answerStringArray=array(array(array("Swimming" ,"Burgers" ,"Bob"))
,array(array("Running" ,"Chips" ,"Paul"))
,array(array("Jogging" ,"Salad" ,"David"))
,array(array("Walking" ,"Sauce" ,"Frank")));
//var_dump($answerStringArray);
echo "***\n";
$xcount = count($answerStringArray);
$ycount = count($answerStringArray[0]);
$zcount = count($answerStringArray[0][0]);
for($z = 0; $z < $zcount; $z++){
for($y = 0; $y < $ycount; $y++){
for($x = 0; $x < $xcount; $x++){
echo $answerStringArray[$x][$y][$z]."\n";
}
if($y < $ycount-1) echo "\n";
}
if($z < $zcount-1) echo "\n";
}
echo "***";
答案 1 :(得分:0)
假设所有数组都是同构的(它们具有相同的长度),你可以这样做:
for($i = 0; $i<count($awnswerStringArray[0][0])){
foreach($answerStringArray as $element){
echo $element[0][$i];
}
}