Jump to content


Photo

Can't Create And Merge An Array


  • Please log in to reply
No replies to this topic

#1 php-steveg

php-steveg
  • New Members
  • Pip
  • Newbie
  • 1 posts

Posted 29 June 2006 - 04:44 PM

What I'm trying to do is create a summarized array from an unsummarized result set from a mysql query. I have a MySQL query that searches for linecards that match a given serial number association. From that sql query I create an array of results. Then I create a new array for purposes of summarizing the results.

Once I get my SQL resultset, I can then create an array using mysql_fetch_array. I prefer my values be indexed numerically, so I'm not using Mysql_assoc on the array.

$link6_array2 = mysql_fetch_array($link6_result2);
$link6_rows2 = mysql_num_rows($link6_result2);

echo "link6 rows is $link6_rows2"; /* outputs 3 */
echo "count link6 array2 " . count($link6_array2) . " "; /* outputs 2 */

!! Curiously, these output different numbers. Is that ok? I think array numbering starts at 0 so they could be considered identical, but I didn't know count() was sensative to that.


Ok, here's a snippit.

for ($i = 0; $i < $link6_rows2; $i++) { /* Number of results from DB query */

$link6_array2 = mysql_fetch_array($link6_result2); /* Create array from DB query */

if (!$bladearray) { /* if first run through loop, create array bladearray */

$vals = $link6_array2[$i]; /* inserted for troubleshooting. This makes the array() */
/* create syntax below prettier. Extracts numeric index 0 here */
/* echo $vals outputs: ALM */

$bladearray = array (
"$vals" => array("qty" => "1") /* since array didn't exist before, should */
/* set $bladearray[ALM][qty] = 1 */
);
//echo $bladearray[ALM][qty]; /* outputs 1 as it should */

} else {

$vals2 = $link6_array2[$i];

// echo $vals2; /* !!! Results in blank output. Nothing regurned??? Why??? */

<cut here >

This is I think the root of my problem. Once the loop starts over again, something goes haywire. My SQL query returns 3 rows. Each row contains one column. Each row is identical. The result set looks pretty simple:

mysql> select shortname from ixiaeval.blade2chs where (chs_sn = '400T-1234');
+-----------+
| shortname |
+-----------+
| ALM |
| ALM |
| ALM |
+-----------+
3 rows in set (0.00 sec)


So why do I not have a value in my next itteration of the for loop? I had one in the first itteration. I should have one in the second and index $i which is now 1.

This is killing me! Thanks for any insight.





<remainder of the loop if interested in using it>


if (array_key_exists($vals2, $bladearray)) { /* must be 2nd + time through */
/*since first !$bladearray failed */
/*so check if $lin6_ar2[1] exists */
/* if so, increment qty for key at */
/*index $l6_arr[ALM][qty] */
$bladearray[$link6_array2][$i][qty]++;

} else { /* create new array since previous key did not exist, must have been something*/
/* other than ALM for $link6_array2[1] */

$vals = $link6_array2[$i];
$bladearray_update = array ( /* create new array of same structure as above */

"$vals" => array("qty" => "1")
);

array_merge($bladearray, $bladearray_update); /* Merge new array onto existing array */
}

} /* exit loop and start all over with next array index */






0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users