NeverPhased
NeverPhased

Reputation: 1566

Multi dimensional array. What am I doing wrong?

I have a function:

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 will be populated with a number of values depending on the $num_players. I am calling the function as follows:

$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/>";
}
}

As you can see I am doing this wrong. I need to output the data located in $value however I am confused with how multi dimensional arrays work. I understand I need to read up on the subject, if possible can you point me to a suitable learning source?

So I changed up the code so that the following is being used to produce an output below:

$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/>";
}
}

enter image description here

I expected to output as follows:

$value[0] should contain $y which then contains each SUconsultant value. $value[1] should contain $y which then contains each marketT value and so on.

Upvotes: 1

Views: 144

Answers (3)

NeverPhased
NeverPhased

Reputation: 1566

This solution worked, after a lot of playing around it seems that the [] after of the value array was also needed? At least I think so

$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/>";
}
}

Output:

enter image description here

And now I have changed to:

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

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

To get my eventual goal of:

enter image description here

Upvotes: 1

James
James

Reputation: 3805

You have a $j in your first for loop, but setting and incrimenting $i in it. Maybe change them to $j as well.

EDIT

It actually looks like you have an issue with where you are returning the data:

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

This should be (it appears):

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

Since you are currently on $value[$i] by the time you reach this point, then you need it to echo out one for each player.

Upvotes: 1

Willem Mulder
Willem Mulder

Reputation: 13994

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

should be

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

And

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

should be

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

Upvotes: 1

Related Questions