Array filtering

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • assgar
    New Member
    • Aug 2006
    • 41

    Array filtering

    Hi

    Seasons Greetings

    Its back, I am being haunted.

    I thought I had resolved this problem but I am intermittently
    the receving the warnings below.

    This code consist of a 1) HTML form, 2) a display function on the HTML form and
    3) a process to manage the form input.

    Can you show me what I am doing wrong and or how to correct it ?

    Message received:

    Warning: array_filter() [function.array-filter]:
    The first argument should be an array in D:\search_proce ss.php on line 155

    Warning: array_filter() [function.array-filter]:
    The first argument should be an array in D:\search_proce ss.php on line 156

    Warning: array_filter() [function.array-filter]:
    The first argument should be an array in D:\search_proce ss.php on line 171

    Warning: array_filter() [function.array-filter]:
    The first argument should be an array in D:\search_proce ss.php on line 172


    Note: I have proveded only a small portion of the related code.




    [html]
    <!--/**FORM**/-->
    {//function start

    //for loop start
    {


    echo"<tr height=\"10\">
    <td width=\"4%\" bgcolor=\"#fff8 dc\" align=\"center\ ">
    <input type=\"checkbox \" name=\"fee1_cho ice[$i]\" value=\"$code_i d\"></td>
    <td width=\"7%\" bgcolor=\"#fff8 dc\" ><span class=\"style20 \"><strong>$fee 1_code</strong></span></td>
    <td width=\"3%\" bgcolor=\"$bgco lor\" height=\"10\">
    <input type=\"text\" name=\"fee1_uni t[$i]\" size=\"1\" maxlength=\"2\" value =\"$fee1_unit \"/>
    </td>
    <td width=\"79%\" bgcolor=\"$bgco lor\" class=\"style20 \"> $description </td>
    <td width=\"6%\" align=\"left\"> $s_fee</td>\n";
    echo"</tr>\n";

    }//end of loop

    //assign all arrays into single array for the return statement
    $all_array = array(fee_choic e, fee_unit, fee_money, fee1_choice, fee1_unit, fee1_fee, fee2_choice, fee2_code, fee2_unit, fee2_describe, fee2_money, fee3_choice, fee3_code, fee3_unit, fee3_describe, fee3_money);

    //return array from function
    return ($all_array);

    }//end of function

    //unpack returned array
    list($fee_choic e, $fee_unit, $fee_money, $fee1_choice, $fee1_unit, $fee1_fee, $fee2_choice, $fee2_code, $fee2_unit, $fee2_describe, $fee2_money, $fee3_choice, $fee3_code, $fee3_unit, $fee3_describe, $fee3_money )= $all_array;

    [/html]


    [/php]


    I changed the format of the array returned by the function
    and thoug thr problem was solved but I startr to get the errors again

    [php]
    <?
    $all_array = array($fee_choi ce, $fee_unit, $fee_money, $fee1_choice,
    $fee1_unit, $fee1_fee, $fee2_choice, $fee2_code, $fee2_unit, $fee2_describe,
    $fee2_money, $fee3_choice, $fee3_code, $fee3_unit, $fee3_describe, $fee3_money);
    ?>
    [/php]


    [php]

    <?php
    /**PROCESS**/

    /**data from form**/
    $fee_unit = $_POST['fee_unit'];//array with the number of units
    $fee_money = $_POST['fee_money'];//array selected fee

    //filter blank indexes
    $fee_unit = array_filter($f ee_unit); //line 155
    $fee_money = array_filter($f ee_money); //line 156


    /**data from form**/
    $fee1_unit = $_POST['fee1_unit'];//array with the number of units
    $fee1_money = $_POST['fee1_money'];//array selected fee


    //filter blank indexes
    $fee1_unit = array_filter($f ee1_unit); //line 171
    $fee1_money = array_filter($f ee1_money);//line 172

    /** get array contents for insertion**/
    $indices2 = array_keys($cod e1_id);
    foreach($indice s2 as $index2)
    {
    //individual value validation from 3 arrays
    $code1_id[$index2];
    $fee1_unit[$index2];
    $fee1_money[$index2];

    //validate unit
    $field_unit = $fee1_unit[$index2];//assign field to array for function
    check_unit_fiel d($field_unit);//funtion to validate user entered numbers or message sent


    //insert statement goes here

    }
    ?>
    [/php]

    I have added the code below to the process to get rid of
    the errors but this creates another problem where the
    foreach loop can't extract the data from the arrays.


    [php]
    <?
    //create array A
    $fee_unit = array($fee_unit );
    $fee_money = array($fee_mone y);


    //create array B
    $fee1_unit = array($fee1_uni t);
    $fee1_money = array($fee1_mon ey);
    ?>

    [/php]
  • ronverdonk
    Recognized Expert Specialist
    • Jul 2006
    • 4259

    #2
    You forgot to post an important part of your code i.e. the form that is submitted with the array in it. Please show us.

    Ronald :cool:

    Comment

    • assgar
      New Member
      • Aug 2006
      • 41

      #3
      I am very sorry but I accidentally deleted your reply. But I have seen it and, maybe I am missing some important part, but I cannot see anywhere on your to-be-submitted form the 2 fields that you extract from the POST array, i.e.[php]$fee_unit = $_POST['fee_unit'];//array with the number of units
      $fee_money = $_POST['fee_money'];//array selected fee
      [/php]

      Ronald :cool:

      Comment

      • assgar
        New Member
        • Aug 2006
        • 41

        #4
        Originally posted by assgar
        I am very sorry but I accidentally deleted your reply. But I have seen it and, maybe I am missing some important part, but I cannot see anywhere on your to-be-submitted form the 2 fields that you extract from the POST array, i.e.[php]$fee_unit = $_POST['fee_unit'];//array with the number of units
        $fee_money = $_POST['fee_money'];//array selected fee
        [/php]

        Ronald :cool:

        Hi Ron

        Thanks for replaying.

        I think this is what you are looking for. The names were messed up in my
        example. I appologize for the length.


        This is the function that display the information on the form.
        [php]
        <?php

        function display($servic es, $special, $fee_master_tab le)
        {

        if ($services == "A")
        {
        $data = "SELECT c.code_id, c.fee_code, c.description, m.general_fee,
        m.technical_fee , m.specialist_fe e, m.anaesthetist_ fee,
        m.non_anaesthet ist_fee
        FROM bill_ohip_fee_c ode c, $fee_master_tab le m
        WHERE c.fee_code = m.code
        AND c.specialty = '$special'
        ORDER BY c.fee_code
        ";
        }


        $result = mysqli_query($m ysqli,$data);
        $num_service = mysqli_num_rows ($result);
        for($i=0; $i < $num_service; $i++)
        {
        $row = mysqli_fetch_ar ray($result);

        list($code_id, $fee1_code, $description, $general_fee, $technical_fee,
        $specialist_fee , $anaesthetist_f ee, $non_anaestheti st_fee) = $row;


        //dropdown list of fees that filter out 0.00
        $s_fee = "<select name=\"fee_mone y[$i]\" >";
        $s_fee .= "<option value=\"\" selected> Select</option>";
        if($general > 0.00)
        $s_fee .= "<option value = \"$general\">Ge n: $general</option>";
        if($technical > 0.00)
        $s_fee .= "<option value = \"$technical\"> Tec: $technical</option>";
        if($specialist > 0.00)
        $s_fee .= "<option value = \"$specialist\" >Spe: $specialist</option>";
        if($anaesthetis t > 0.00)
        $s_fee .= "<option value = \"$anaesthetist \">Ana: $anaesthetist</option>";
        if($non_anaesth etist > 0.00)
        $s_fee .= "<option value = \"$non_anaesthe tist\">Non: $non_anaestheti st</option>";
        //input box is displayed if no fee values for all 5
        elseif($general == 0.00 && $technical == 0.00 && $specialist == 0.00 &&
        $anaesthetist == 0.00 && $non_anaestheti st == 0.00)
        $s_fee = "<input type=\"text\" name=\"fee[money]\" size=\"9\" maxlength=\"7\" value =\"$ohip_fee\ "/>\n";
        $s_fee .= "</select>";


        if($i % 2) //alternate row colour
        {
        $bgcolor="#eeee e0";
        }
        else
        {
        $bgcolor="#ebea e0";
        }

        //diaplay search results in rows
        echo"<tr height=\"10\">
        <td width=\"4%\" bgcolor=\"#fff8 dc\" align=\"center\ ">
        <input type=\"radio\" name=\"choice[]\" value=\"$code_i d\" selected>
        <input type=\"hidden\" name=\"fee1_cho ice[$i]\" value=\"$code_i d\"></td>
        <td width=\"7%\" bgcolor=\"#fff8 dc\"><span class=\"style20 \">
        <div style = \"margin:5;\">< strong>$fee1_co de</strong></span></div></td>
        <td width=\"3%\" bgcolor=\"$bgco lor\" height=\"10\">
        <input type=\"text\" name=\"fee_unit[$i]\" size=\"1\" maxlength=\"2\" value =\"$fee1_unit \"/></td>
        <td width=\"79%\" bgcolor=\"$bgco lor\" class=\"style20 \">
        <div style = \"margin:5;\">$ description </div></td>
        <td width=\"6%\" align=\"left\"> $s_fee</td>\n";
        echo"</tr>\n";

        }//end of for loop



        echo"</div>\n";
        echo "</div>\n";
        echo "</table>\n";

        $mysqli->close();//close connection to db

        //assign all arrays into single array for the return statement
        $all_array = array(choice, fee_choice, fee_unit, fee_money, fee1_choice,
        fee1_unit, fee1_fee, fee2_choice, fee2_unit, fee2_describe,
        fee2_money, fee3_code, fee3_unit, fee3_describe, fee3_money);

        //return array from function
        return ($all_array);

        }//end of function

        //unpack returned array
        list($choice, $fee_choice, $fee_unit, $fee_money, $fee1_choice,
        $fee1_unit, $fee1_fee, $fee2_code, $fee2_unit, $fee2_describe,
        $fee2_money, $fee3_code, $fee3_unit, $fee3_describe, $fee3_money )= $all_array;
        ?>
        [/php]

        Comment

        • assgar
          New Member
          • Aug 2006
          • 41

          #5
          Originally posted by assgar
          Hi Ron

          Thanks for replaying.

          I think this is what you are looking for. The names were messed up in my
          example. I appologize for the length.


          This is the function that display the information on the form.
          [php]
          <?php

          function display($servic es, $special, $fee_master_tab le)
          {

          if ($services == "A")
          {
          $data = "SELECT c.code_id, c.fee_code, c.description, m.general_fee,
          m.technical_fee , m.specialist_fe e, m.anaesthetist_ fee,
          m.non_anaesthet ist_fee
          FROM bill_ohip_fee_c ode c, $fee_master_tab le m
          WHERE c.fee_code = m.code
          AND c.specialty = '$special'
          ORDER BY c.fee_code
          ";
          }


          $result = mysqli_query($m ysqli,$data);
          $num_service = mysqli_num_rows ($result);
          for($i=0; $i < $num_service; $i++)
          {
          $row = mysqli_fetch_ar ray($result);

          list($code_id, $fee1_code, $description, $general_fee, $technical_fee,
          $specialist_fee , $anaesthetist_f ee, $non_anaestheti st_fee) = $row;


          //dropdown list of fees that filter out 0.00
          $s_fee = "<select name=\"fee_mone y[$i]\" >";
          $s_fee .= "<option value=\"\" selected> Select</option>";
          if($general > 0.00)
          $s_fee .= "<option value = \"$general\">Ge n: $general</option>";
          if($technical > 0.00)
          $s_fee .= "<option value = \"$technical\"> Tec: $technical</option>";
          if($specialist > 0.00)
          $s_fee .= "<option value = \"$specialist\" >Spe: $specialist</option>";
          if($anaesthetis t > 0.00)
          $s_fee .= "<option value = \"$anaesthetist \">Ana: $anaesthetist</option>";
          if($non_anaesth etist > 0.00)
          $s_fee .= "<option value = \"$non_anaesthe tist\">Non: $non_anaestheti st</option>";
          //input box is displayed if no fee values for all 5
          elseif($general == 0.00 && $technical == 0.00 && $specialist == 0.00 &&
          $anaesthetist == 0.00 && $non_anaestheti st == 0.00)
          $s_fee = "<input type=\"text\" name=\"fee[money]\" size=\"9\" maxlength=\"7\" value =\"$ohip_fee\ "/>\n";
          $s_fee .= "</select>";


          if($i % 2) //alternate row colour
          {
          $bgcolor="#eeee e0";
          }
          else
          {
          $bgcolor="#ebea e0";
          }

          //diaplay search results in rows
          echo"<tr height=\"10\">
          <td width=\"4%\" bgcolor=\"#fff8 dc\" align=\"center\ ">
          <input type=\"radio\" name=\"choice[]\" value=\"$code_i d\" selected>
          <input type=\"hidden\" name=\"fee1_cho ice[$i]\" value=\"$code_i d\"></td>
          <td width=\"7%\" bgcolor=\"#fff8 dc\"><span class=\"style20 \">
          <div style = \"margin:5;\">< strong>$fee1_co de</strong></span></div></td>
          <td width=\"3%\" bgcolor=\"$bgco lor\" height=\"10\">
          <input type=\"text\" name=\"fee_unit[$i]\" size=\"1\" maxlength=\"2\" value =\"$fee1_unit \"/></td>
          <td width=\"79%\" bgcolor=\"$bgco lor\" class=\"style20 \">
          <div style = \"margin:5;\">$ description </div></td>
          <td width=\"6%\" align=\"left\"> $s_fee</td>\n";
          echo"</tr>\n";

          }//end of for loop



          echo"</div>\n";
          echo "</div>\n";
          echo "</table>\n";

          $mysqli->close();//close connection to db

          //assign all arrays into single array for the return statement
          $all_array = array(choice, fee_choice, fee_unit, fee_money, fee1_choice,
          fee1_unit, fee1_fee, fee2_choice, fee2_unit, fee2_describe,
          fee2_money, fee3_code, fee3_unit, fee3_describe, fee3_money);

          //return array from function
          return ($all_array);

          }//end of function

          //unpack returned array
          list($choice, $fee_choice, $fee_unit, $fee_money, $fee1_choice,
          $fee1_unit, $fee1_fee, $fee2_code, $fee2_unit, $fee2_describe,
          $fee2_money, $fee3_code, $fee3_unit, $fee3_describe, $fee3_money )= $all_array;
          ?>
          [/php]

          Hi

          I have been using this bit of code to resolve the problem for over
          a week and have not received the error message.

          This can be considered resolved.


          [php]

          /*** arrays passed from the form with selected service variables ***/
          $code_id = $_POST['fee_choice']; //array of code_id primary key
          $fee_unit = $_POST['fee_unit'];//array with the number of units
          $fee_money = $_POST['fee_money'];//array selected fee


          //filter array $fee_unit
          if(is_array($fe e_unit))
          {
          $fee_unit = array_filter($f ee_unit);
          }
          else
          {
          $fee_unit = array($fee_unit );
          $fee_unit = array_filter($f ee_unit);
          }
          //filter array $fee_money
          if(is_array($fe e_money))
          {
          $fee_money = array_filter($f ee_money);
          }
          else
          {
          $fee_money = array($fee_mone y);
          $fee_money = array_filter($f ee_money);
          }

          [/php]

          Comment

          Working...