【问题标题】:Multi dimensional array. What am I doing wrong?多维数组。我究竟做错了什么?
【发布时间】:2012-02-10 16:14:00
【问题描述】:

我有一个函数:

function getDecision($num_players, $decisionType, $stage){

echo "in the function 1: ".$num_players."<br/>";
echo "in the function 2: ".$decisionType."<br/>";
echo "in the function 3: ".$stage."<br/>";

$x = mysql_query("

    SELECT `decisionValue` FROM `teamdecision` WHERE `decisionType` = '$decisionType' && `period`= '$stage'

    ")or die($x."<br/><br/>".mysql_error());

            $y = array();
            $i="0";
            while ($i<($num_players) && $row = mysql_fetch_assoc($x))
            {

            $y[$i] = $row['decisionValue'];
            $i++;

            }

            return ($y);
}

Y 将根据$num_players 填充多个值。我调用函数如下:

$value = array();
$name = array();

for ($j=0;$j<$num_players;$j++){
for ($i=0;$i<4;$i++){
$name[0] = "SUconsultant";
$name[1] = "marketT";
$name[2] = "sector";
$name[3] = "saleprice";

echo $name[$i]."<br/>";

$value[$i] = getDecision($num_players, $name[$i], $currentStage)."<br/>";

echo "Value = ".$value[$j][$i]."<br/>";
}
}

如您所见,我做错了。我需要输出位于$value 中的数据,但是我对多维数组的工作方式感到困惑。我知道我需要阅读该主题,如果可能的话,您能否为我指出一个合适的学习资源?

所以我更改了代码,以便使用以下内容生成以下输出:

$value = array();
$name = array();

for ($j=0;$j<$num_players;$j++){
for ($i=0;$i<4;$i++){
$name[0] = "SUconsultant";
$name[1] = "marketT";
$name[2] = "sector";
$name[3] = "saleprice";

echo $name[$i]."<br/>";

$value[$i] = getDecision($num_players, $name[$i], $currentStage)."<br/>";

echo "Value = ".$value[$j][$i]."<br/>";
}
}

我希望输出如下:

$value[0] 应该包含 $y,然后包含每个 SUconsultant 值。 $value[1] 应该包含 $y 然后包含每个 marketT 值等等。

【问题讨论】:

  • ISfor ($i=0;$j&lt;4;$i++)i有故意的吗?因为我觉得不是……
  • 好吧,$i="0"; 将 $i 定义为字符串 - 它会起作用,但首先不需要引号。
  • 对不起,你是对的,我修复了两个评论问题。

标签: php mysql arrays multidimensional-array


【解决方案1】:
for ($i=0;$j<4;$i++){

应该是

for ($j=0;$j<4;$j++){

还有

$value[$i] = getDecision($num_players, $name[$i], $currentStage)."<br/>";

应该是

$value[$j] = getDecision($num_players, $name[$j], $currentStage)."<br/>";

【讨论】:

  • 改变这并没有什么不同,似乎字符串没有正确传递给函数。请看我上面的编辑。
  • 你确实改变了第一部分,但没有改变这一行: $value[$j] = getDecision($num_players, $name[$j], $currentStage)."
    ";
  • 我试过了,但没用,请看我的解决方案 经过大量调整后我自己回答了这个问题。
【解决方案2】:

您在第一个 for 循环中有一个 $j,但在其中设置和添加了 $i。也许也可以将它们更改为$j

编辑

实际上,您返回数据的位置似乎存在问题:

echo "Value = ".$value[$j][$i]."<br/>";

这应该是(出现):

for ($f = 0; $f < $num_players; $f++){
    echo "Value = ".$value[$i][$f]."<br/>";
}

由于您目前在$value[$i] 上,当您到达这一点时,您需要它为每个玩家回显一个。

【讨论】:

  • 我已经做到了,现在看来$name 没有正确传递给函数。只有每个字符串的第一个字母。
  • 尝试在顶部$value = array();下方指定$name = array();
  • 是的,就是这样做的。请参阅上面的编辑。我现在正在写。
  • 你能放一些你期望的输出示例吗?
  • 开始您的第一个“预期”结果返回,您应该得到一个包含 2 个不同值的数组,因为您为 $num_players 传递了 2 参数。所以$y 应该是一个 2 的数组,这意味着 $value[$i] 也应该包含一个 2 的数组。 $value[$i][0]$value[$i][1],这意味着在这种情况下您应该回显两个值。或者我只是假设这就是你的目标。
【解决方案3】:

这个解决方案奏效了,在玩了很多之后,似乎 [] 之后 还需要value 数组吗?至少我是这么认为的

$value = array();
$name = array();

for ($j=0;$j<$num_players;$j++){
for ($i=0;$i<4;$i++){
$name[0] = "SUconsultant";
$name[1] = "marketT";
$name[2] = "sector";
$name[3] = "saleprice";

echo $name[$i]."<br/>";

$value[] = getDecision($num_players, $name[$i], $currentStage);

//echo "Value = ".$value[$i]."<br/>";

echo "<br/><hr/>";
echo "Value = ".$value[$i][$j]."<br/><hr/>";
}
}

输出:

现在我改成了:

$value[] = getDecision($num_players, $name[$i], $currentStage);

echo "Team ".$j." ".$name[$i]." = ".$value[$i][$j]."<br/>";

实现我的最终目标:

【讨论】:

    猜你喜欢
    • 2013-08-06
    • 1970-01-01
    • 2016-07-18
    • 2019-12-23
    • 2014-06-15
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    相关资源
    最近更新 更多