Re: what to use instead of foreach

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

 



Hi Leon & thanks.
It sure is complicated. Jim Lucas example did the trick very nicely (in
my other post -
"extract varying data from array with different formatting" but here I
am learning about other ways & means.
Redoing the arrays means redoing the queries :-(  but I'll have a go at
it if I'm to learn anything. I already have a ranking column set up but
am not using it at the moment for the author display. Anyway, I have
enough to keep my neurons busy for a while.
Thanks.

Leon du Plessis wrote:
> Hi PJ,
>
> You may want to remove the "," before the <br>...That was a slight
> oversight
> on my part....sorry.'bout that...I will leave you to do the fixing,
> but I am
> sure you get the general idea.
>
> Best wishes..Leon
>
> -----Original Message-----
> From: Leon du Plessis [mailto:leon@xxxxxxxxxx]
> Sent: 13 April 2009 06:48 PM
> To: 'PJ'
> Cc: php-general@xxxxxxxxxxxxx
> Subject: RE:  what to use instead of foreach
>
> Hi PJ,
>
> Ok, If I understand correctly you can attempt to alter your code as per
> following example (I am breaking it down a little for readability):
>
> a) If you only wish to output the authors, see also Mark Kelly's example,
> You can simply output as many authors you have associated (you will
> need an
> associated array!!:
>
> Or b) I include the following alternative example:
>
> ....
> $string_out = "":
> Foreach ($my_titles as $titles)
> {
> Echo "Title: $titles By:<br>";
> Foreach($my_authors[$title] as $author)
> $string_out .= "$author, "; /* Building string */
>
> // Add <br>
> $string_out .= "<br>";
>
> // Here you would replace your last comma with the "&" you want
> // There are a few ways to do this (like Mark Kelly's), but will try
> // another way (older, maybe less complicated?).
> $final_string = substr($string_out,0,strrpos($string_out,",") - 1);
> $final_string .= " & " .
> substr($string_out,strrpos($string_out,",") + 1);
> }
> ....
>
> So all you need is to modal your data around this, and you should be
> fine.
> You could construct your arrays then as follows as an example:
>
> ....
> $my_titles = array("title1","title2");
> $my_authors["title1"] = array("a someone","a notherone");
> $my_authors["title2"] = array("mr. a","mr. b");
> ...
>
> and so forth...how you construct the data is then very important as
> you can
> then later use it simplify your coding as you progress and as demonstrated
> below:
>
> In future, where the need justifies it, you can construct your array to
> already contain the needed string you want to output, it may help, but you
> will sometimes have the same effort in constructing the data for the
> arrays,
> so it is up to you to decide which approach is going to be best: e.g.
> $my_titles = array("title1","title2");
> $my_authors["title1"] = array("a someone, a notherone & Mr. X");
>
> Then you can simply echo the array value:
> echo "$my_authors["title1"] . "<br>";
>
> Hope it is enough info for to work on for now!!
>
> Have fun!
> Leon
>
> -----Original Message-----
> From: PJ [mailto:af.gourmet@xxxxxxxxxxxx]
> Sent: 13 April 2009 04:33 PM
> To: Leon du Plessis
> Cc: php-general@xxxxxxxxxxxxx
> Subject: Re:  what to use instead of foreach
>
> Hi Leon,
> Thanks for the suggestion; I'm quite new to all this, so it's a bit
> complicated for my peanut brain.
> I have already tried with several count and for schemes. None work
> because foreach ignores any counters once in the loop. Also, this
> foreach is nested within another foreach; don't know if that affects
> anything.
> I'll try to understand the second suggestion using for. I'll see what
> comes up.
> There are actually several conditions that have to be met:
> 1. if only 1 author = echo "author<br>"
> 2. if 2 authors = echo "author & author1<br>"
> 3. if more than 2 authors = echo "author, author1, author2 & author3<br>"
> That's what makes it a "toughie"
>
> Leon du Plessis wrote:
>> You may try something basic like:
>>
>> $b = 1;
>> foreach ($my_array as $a)
>> {
>> echo " $a ";
>>
>> //Send new line to browser
>> if ($b++ == 3) { echo "<br>"; $b = 1; }
>> }
>>
>> Or there are some different ways to approach this also like:
>> for ($a =& current($my_array); $a; $a = next($my_array))
>> {
>> //Format 1
>> echo " $a ";
>> $a = next($my_array);
>>
>> //Format 2
>> /* you may add checks here to see if $a contains data */
>> echo " ~ $a ~ "; $a = next($my_array);
>>
>> //Format 3 + NEW LINE
>> /* you may add checks here to see if $a contains data */
>> echo " ~~ $a ~~<br> ";
>> }
>>
>> This way you have some added control over the iteration through the
>> array,
>> and you can play around with when & how to display what.
>>
>> Regards.
>>
>> -----Original Message-----
>> From: PJ [mailto:af.gourmet@xxxxxxxxxxxx]
>> Sent: 12 April 2009 08:57 PM
>> To: php-general@xxxxxxxxxxxxx
>> Subject:  what to use instead of foreach
>>
>> foreach does not allow for different formatting for output...
>> What could be used as a workaround?
>> example:
>> echo $some_result, "<br>"; // will print all results in 1 column
>> echo $some_result, ","; // will print all results comma-separated in
>> 1 row
>>
>> But how do you get result1, result2 & result3 // with <br> at end ?
>


-- 
unheralded genius: "A clean desk is the sign of a dull mind. "
-------------------------------------------------------------
Phil Jourdan --- pj@xxxxxxxxxxxxx
http://www.ptahhotep.com
http://www.chiccantine.com/andypantry.php

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[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