Multidimensional array problem

PHP programming forum. Ask questions or help people concerning PHP code. Don't understand a function? Need help implementing a class? Don't understand a class? Here is where to ask. Remember to do your homework!

Moderator: General Moderators

Post Reply
phear69
Forum Newbie
Posts: 5
Joined: Fri Jan 08, 2010 10:07 am

Multidimensional array problem

Post by phear69 »

pickle | Please use [ code=php ], [ code=text ], etc tags where appropriate when posting code. Your post has been edited to reflect how we'd like it posted. Please read: :arrow: Posting Code in the Forums to learn how to do it too.


I'm having trouble with this and I can't figure out why. One of my values in my multidimensional arrays is not changing when I assign it but only on one occasion.

----------------------------------------

Code: Select all

 
 $m_array[$uid][0] = $m_array[$uid][0] + 1;
      $temp = $m_array[$uid][1];
      echo "<P>UID: $uid Arr Before: $temp ->";
      $x = 10;
      while($x > 0) {
        foreach($p_array as $index => $value) {
          $y = 10 - $x;
          if($w_array[$y] == $value) {
            $temp += $x;
            echo "ADDING [$x]";
          }
        }
        $x -= 1;
      }
      $m_array[$uid][1] = $temp;
      if($m_array[$uid][1] != $temp) {
        echo "WTF?!?!";
        $m_array[$uid][1] = $temp;
      }
      echo "After: ($temp) {$m_array[$uid][1]}";
 
-----------------------------------------------
OUPUT:
UID: 1 Arr Before: 0 ->ADDING [10]ADDING [9]ADDING [8]ADDING [7]ADDING [6]ADDING [5]ADDING [4]ADDING [3]ADDING [2]ADDING [1]After: (55) 55

UID: 2 Arr Before: 0 ->ADDING [6]ADDING [3]ADDING [1]ADDING [1]WTF?!?!After: (11) 1

UID: 2 Arr Before: 1 ->ADDING [7]After: (8) 8

UID: 3 Arr Before: 0 ->After: (0) 0


pickle | Please use [ code=php ], [ code=text ], etc tags where appropriate when posting code. Your post has been edited to reflect how we'd like it posted. Please read: :arrow: Posting Code in the Forums to learn how to do it too.
User avatar
manohoo
Forum Contributor
Posts: 201
Joined: Wed Dec 23, 2009 12:28 pm

Re: Multidimensional array problem

Post by manohoo »

Please post the contents of all arrays involved before you run the code you posted.

echo "<pre>";
var_dump($m_array);
var_dump($p_array);

etc...
phear69
Forum Newbie
Posts: 5
Joined: Fri Jan 08, 2010 10:07 am

Re: Multidimensional array problem

Post by phear69 »

Code: Select all

 
      $m_array[$uid][0] = $m_array[$uid][0] + 1;
      echo "<pre>";
      var_dump($m_array);
      var_dump($p_array);
      var_dump($w_array);
      $temp = $m_array[$uid][1];
      echo "<P>UID: $uid Arr Before: $temp ->";
      $x = 10;
      while($x > 0) {
        foreach($p_array as $index => $value) {
          $y = 10 - $x;
          if($w_array[$y] == $value) {
            $temp += $x;
            echo "ADDING [$x]";
          }
        }
        $x -= 1;
      }
      $m_array[$uid][1] = $temp;
      if($m_array[$uid][1] != $temp) {
        echo "WTF?!?!";
        $m_array[$uid][1] = $temp;
      }
      echo "After: ($temp) {$m_array[$uid][1]}";
 
OUTPUTS:

Code: Select all

 
array(2) {
  [0]=>
  string(1) "1"
  [1]=>
  array(2) {
    [0]=>
    int(1)
    [1]=>
    int(0)
  }
}
array(10) {
  [0]=>
  string(2) "10"
  [1]=>
  string(2) "17"
  [2]=>
  string(1) "7"
  [3]=>
  string(2) "20"
  [4]=>
  string(1) "2"
  [5]=>
  string(2) "21"
  [6]=>
  string(2) "23"
  [7]=>
  string(2) "16"
  [8]=>
  string(2) "14"
  [9]=>
  string(1) "1"
}
array(10) {
  [0]=>
  string(2) "10"
  [1]=>
  string(1) "7"
  [2]=>
  string(1) "2"
  [3]=>
  string(2) "23"
  [4]=>
  string(2) "14"
  [5]=>
  string(2) "17"
  [6]=>
  string(2) "20"
  [7]=>
  string(2) "21"
  [8]=>
  string(2) "16"
  [9]=>
  string(1) "1"
}
UID: 1 Arr Before: 0 ->ADDING [10]ADDING [9]ADDING [8]ADDING [7]ADDING [6]ADDING [5]ADDING [4]ADDING [3]ADDING [2]ADDING [1]After: (55) 55
[color=#FF0000]array(4) {
  [0]=>
  string(1) "1"
  [1]=>
  array(2) {
    [0]=>
    int(1)
    [1]=>
    int(55)
  }
  [2]=>
  string(2) "10"
  [3]=>
  array(2) {
    [0]=>
    int(0)
    [1]=>
    int(0)
  }
}
array(10) {
  [0]=>
  string(2) "18"
  [1]=>
  string(2) "21"
  [2]=>
  string(1) "1"
  [3]=>
  string(2) "28"
  [4]=>
  string(1) "3"
  [5]=>
  string(2) "44"
  [6]=>
  string(1) "1"
  [7]=>
  string(2) "14"
  [8]=>
  string(2) "34"
  [9]=>
  string(2) "36"
}
array(10) {
  [0]=>
  string(2) "10"
  [1]=>
  string(1) "7"
  [2]=>
  string(1) "2"
  [3]=>
  string(2) "23"
  [4]=>
  string(2) "14"
  [5]=>
  string(2) "17"
  [6]=>
  string(2) "20"
  [7]=>
  string(2) "21"
  [8]=>
  string(2) "16"
  [9]=>
  string(1) "1"
}
UID: 2 Arr Before: 0 ->ADDING [6]ADDING [3]ADDING [1]ADDING [1]WTF?!?!After: (11) 1
[/color]
array(4) {
  [0]=>
  string(1) "1"
  [1]=>
  array(2) {
    [0]=>
    int(1)
    [1]=>
    int(55)
  }
  [2]=>
  string(2) "21"
  [3]=>
  array(2) {
    [0]=>
    int(0)
    [1]=>
    int(0)
  }
}
array(10) {
  [0]=>
  string(1) "8"
  [1]=>
  string(2) "23"
  [2]=>
  string(2) "35"
  [3]=>
  string(2) "46"
  [4]=>
  string(1) "3"
  [5]=>
  string(2) "38"
  [6]=>
  string(2) "19"
  [7]=>
  string(2) "40"
  [8]=>
  string(2) "29"
  [9]=>
  string(2) "53"
}
array(10) {
  [0]=>
  string(2) "10"
  [1]=>
  string(1) "7"
  [2]=>
  string(1) "2"
  [3]=>
  string(2) "23"
  [4]=>
  string(2) "14"
  [5]=>
  string(2) "17"
  [6]=>
  string(2) "20"
  [7]=>
  string(2) "21"
  [8]=>
  string(2) "16"
  [9]=>
  string(1) "1"
}
UID: 2 Arr Before: 1 ->ADDING [7]After: (8) 8
array(4) {
  [0]=>
  string(1) "1"
  [1]=>
  array(2) {
    [0]=>
    int(1)
    [1]=>
    int(55)
  }
  [2]=>
  string(2) "28"
  [3]=>
  array(2) {
    [0]=>
    int(1)
    [1]=>
    int(0)
  }
}
array(10) {
  [0]=>
  string(2) "13"
  [1]=>
  string(2) "13"
  [2]=>
  string(2) "30"
  [3]=>
  string(2) "30"
  [4]=>
  string(1) "3"
  [5]=>
  string(1) "3"
  [6]=>
  string(2) "29"
  [7]=>
  string(2) "47"
  [8]=>
  string(2) "19"
  [9]=>
  string(2) "37"
}
array(10) {
  [0]=>
  string(2) "10"
  [1]=>
  string(1) "7"
  [2]=>
  string(1) "2"
  [3]=>
  string(2) "23"
  [4]=>
  string(2) "14"
  [5]=>
  string(2) "17"
  [6]=>
  string(2) "20"
  [7]=>
  string(2) "21"
  [8]=>
  string(2) "16"
  [9]=>
  string(1) "1"
}
UID: 3 Arr Before: 0 ->After: (0) 0
User avatar
manohoo
Forum Contributor
Posts: 201
Joined: Wed Dec 23, 2009 12:28 pm

Re: Multidimensional array problem

Post by manohoo »

One question.

$m_array has 2 elements: element 0 is string '1', element 1 is array(1,0), both of them integers
Is that the intent?

Also, what's the value of $uid?
Last edited by manohoo on Fri Jan 08, 2010 1:05 pm, edited 1 time in total.
phear69
Forum Newbie
Posts: 5
Joined: Fri Jan 08, 2010 10:07 am

Re: Multidimensional array problem

Post by phear69 »

I've found the issue.

Code: Select all

 
      if(!(array_key_exists($uid,$m_array))){
        $t_array = array($uid, array(0,0));
        $m_array = array_merge($m_array,$t_array);
        $m_array[$uid][0] = 0;
        $m_array[$uid][1] = 0;
      }
 

Code: Select all

 
  $t_array = array($uid, array(0,0));
 
For some reason, that causes the issue.

Code: Select all

 
  $t_array= array($uid => array(0,0));
 
That fixes the problem. Isn't it supposed to work with the comma?
phear69
Forum Newbie
Posts: 5
Joined: Fri Jan 08, 2010 10:07 am

Re: Multidimensional array problem

Post by phear69 »

element 0 is the ID tag, element 1 is an array of two elements both counters
User avatar
manohoo
Forum Contributor
Posts: 201
Joined: Wed Dec 23, 2009 12:28 pm

Re: Multidimensional array problem

Post by manohoo »

I am glad you found out. It's easy to confuse associative/non-associative arrays.
phear69
Forum Newbie
Posts: 5
Joined: Fri Jan 08, 2010 10:07 am

Re: Multidimensional array problem

Post by phear69 »

Thanks for taking a look.
Post Reply