I am running PHP 5.4 on IIs 6 on a Windows SBS 2003 server. Here is a
streamlined version of the code I am dealing with. I tried to trim as much
as possible to only show code that deals with my issue. The main issue I
think I am having is the global array statement within the function is not
working. From all of the articles I have read, I seem to be doing it
correctly, yet it does not recognize $InvReq as an array within the
function. The array works just fine outside of the function, though. Here
are the error messages:


Notice: Undefined variable: InvReq (line numbers point to inside the

Warning: array_key_exists() expects parameter 2 to be array, null given
(line numbers point to inside the function)


If anyone could point out where I have incorrect syntax or something else
that would interfere with the global reference for the array within the
function, or tell me I can't do what I am doing using arrays, but assume I
don't have the ability to write to an external work table, which is why I am
trying to use an array in the first place. Thanks.



$InvReq = array();


// there is some database action here and other programming, but the core
issue is writing to the array, so assume I have all of the necessary data

// data loop to gather inventory requests ---

                $linetotal = ???;

                $hldpartID = ?????;         //these variables are provided
by looping, so this check/write/update code snippet happens many times to
update/write to the array


                if (array_key_exists($hldpartID, $InvReq)) {

                                $InvReq[$hldpartID] += $linetotal;
//if this line will create the array entry if it does not exist, then I
don't need the key_exists check, anyone??

                } else {

                                $InvReq[$hldpartID] = $linetotal;



                Part_BOM($hldpartID, $linetotal, 1);       //function is
called the first time to set up the BOM

// end loop ---


// after gathering all of the inventory requests, check for inventory on

reset ($InvReq);

while (list($PartID,) = each($InvReq)) {

                // data loop to get inventory on hand ---

                                $OnHandQty = ???;         //these variables
are provided by looping, so this check/write/update code snippet happens
many times to update/add to the array


                                if (array_key_exists($PartID, $InvReq)) {

                                                $InvReq[$PartID] -=

                                } else {

                                                $InvReq[$PartID] =


                                Part_BOM($PartID, $OnHandQty, 2);
//function is called the second time to trim up BOM

                // end loop ---


// print list

$display_block = "<h2>Part Forecast</h2><table><tr><th>Part
Number</th><th>Amount Needed</th></tr>";

reset ($InvReq);

while (list($PartID,$need) = each($InvReq)) {

                $needout = number_format($need);

                $display_block .=


$display_block .= "</table>";


//---this function adds or subtracts inventory to/from the BOM materials for
the part passed.

//---it also can add parts that make parts with their inventory total for a
multiple level BOM


function Part_BOM($PartID, $need, $phase) {


                global $Invreq;


                $BOMreq = $need * $BOMQty;                 //$BOMQty &
$BOMPartID are pulled from a database keyed by $PartID


                if ($phase == 1) {

                                if (array_key_exists($BOMPartID, $InvReq)) {

                                                $InvReq[$BOMPartID] +=
$BOMreq;      //first time through adds to array item totals

                                } else {

                                                $InvReq[$BOMPartID] =


                } else {

                                if (array_key_exists($BOMPartID, $InvReq)) {

                                                $InvReq[$BOMPartID] -=
$BOMreq;       //second time through subtracts from array item totals




                if (--check for parts within other parts for multiple level
BOM--) {

                                Part_BOM($BOMPartID, $BOMreq, $phase);
//this calls itself and can refer/loop back to itself several times









                <?php echo $display_block ?>





Thanks for your input,


Jeff Burcher - IT Dept

Allred Metal Stamping

PO Box 2566

High Point, NC 27261

(336)886-5221 x229




Reply via email to