Re: How to force an associative array

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I got this to work, although I still don't understand why since I think the
original code was compliant with the manual.  But problem is solved now so
thanks to anyone who was as puzzled as I and didn't have an answer.

John
=======
On Sun, 2023-01-22 at 22:55 -0500, John Iliffe wrote:
> Thanks Jeffry:
> 
> Looks like I forgot to provide a big enough chunk of the programme code :-(
> 
> This is entirely within a group of nested loops that select one header at a
> time, then run through the required header list (each of which is an array, but
> with enumerated members rather than associative.  I need the associative array
> for the last result because I need to be able to select by header name.  (these
> are selections from the standard e-mail headers, and what is received includes
> many that are a bit unpredictable).
> 
> Anyhow, here is the full code for the selection, when this clip starts the
> received headers are in an array $_headers[] that will be presented one at a
> time to the selection process, in one random example I found 47 headers and I
> suppose more are possible.  $_i will be used for future requirements that aren't
> written yet. I added the remark "******here***" on the line where the problem
> seems to arise to make it easier to find the problem that I am having; it isn't
> actually in the programme.  All the fwrite() are for debugging and will
> eventually be removed.
> 
> ---
> for ($_j=0;$_j<$_num_headers;$_j++)
>   {
>    $_i=0;
>    $_the_header = $_headers[$_j];  // <---this is the received headers, one at a
> time
> 
>    for ($_k=0;$_k<count($_head_reqd);$_k++)
>      {
> fwrite($_xf,("\ntesting [" . $_k . "] = >" . $_head_reqd[$_k] . "< against
> header >" . $_the_header . "\n"));
> 
>       if (($_pos = stripos($_the_header,$_head_reqd[$_k])) !== false)
>         {
>          if ($_pos < 3)
>            {
>             $_name = substr($_head_req[$_k],0,-1);      // knock off ':'
> ******here***    $_head_array[$_name] = $_the_header;        // primary header;
> may be more, eg "To:"
> 
> fwrite ($_xf, "\n--got a match on " . $_head_reqd[$_k] ." header request---\n");
>            }
>         }
>      }
>   }
> ---
> 
> Regards,
> 
> John
> ======
> On Sun, 2023-01-22 at 16:14 -0800, JEFFRY KILLEN wrote:
> > It looks like you have not declared and intialized $_k before using it
> > 
> > > if (($_pos = stripos($_the_header,$_head_reqd[$_k])) !== false)
> > 
> > I believe you should declair it and initialize it in a higher scope like so:
> > 
> > $_k = 0;
> > > if (($_pos = stripos($_the_header,$_head_reqd[$_k])) !== false)
> > 
> > You are also not incrementing $_k that I can see
> > 
> > > On Jan 22, 2023, at 2:20 PM, John Iliffe <john.iliffe@xxxxxxxxx> wrote:
> > > 
> > > I have an application where the members (by name) of an associative array are
> > > not known until run time.  I have been unable to force the member names to the
> > > correct name, what I get is a single addition to the array with the name 0,
> > > indicating that this is being created with the elements numbered. All added
> > > members of the array disappear except the last one added.
> > > 
> > > $_head_array = array("start"=>"start");
> > > 
> > > if (($_pos = stripos($_the_header,$_head_reqd[$_k])) !== false)
> > >        {
> > >         if ($_pos < 3)
> > >           {
> > >            $_name = substr($_head_req[$_k],0,-1);      // knock off ':'
> > >            $_head_array[$_name] = $_the_header;      
> > >           }
> > >        }
> > > 
> > > ... etc
> > > 
> > > What this is doing is iterating through $_head_reqd (a list of header names) to
> > > find out if $_the_header is one of these.  If so, it is added to the associative
> > > array $_head_array.  I set up $_head_array with a first element "start"=>"start"
> > > to force (as I thought) an associative array.
> > > 
> > > What results (as displayed by print_r):
> > > 
> > > -----------selected headers--------
> > > Array
> > > (
> > >    [start] => start
> > >    [0] => Subject: 876543
> > > )
> > > ----------end of selected headers-----
> > > 
> > > Several hits preceding "Subject" are not recorded even though they were selected
> > > initially, and the last line SHOULD read "[Subject] => Subject: 876543"
> > > 
> > > How can I force the proper element names?
> > > 
> > > Thanks in advance.
> > > 
> > > John
> > > ======
> > 




[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux