Reply to Re: can you foreach() two arrays at once ?

Your name:

Reply:


Posted by Jerry Stuckle on 09/07/07 19:03

Rik Wasmus wrote:
> On Fri, 07 Sep 2007 19:13:57 +0200, Jerry Stuckle
> <jstucklex@attglobal.net> wrote:
>
>> J. Frank Parnell wrote:
>>> On Fri, 07 Sep 2007 07:22:46 -0400, Jerry Stuckle
>>> <jstucklex@attglobal.net>
>>> wrote:
>>>
>>>> J. Frank Parnell wrote:
>>>>> On Thu, 06 Sep 2007 21:41:27 -0400, Jerry Stuckle
>>>>> <jstucklex@attglobal.net>
>>>>> wrote:
>>>>>
>>>>>> J. Frank Parnell wrote:
>>>>>>> Hello,
>>>>>>> So, I was wondering how to do this:
>>>>>>>
>>>>>>> foreach($foo as $k=>$v AND $bar as $k2=>$v2){
>>>>>>> echo '<TR><TD>$k</TD><TD>$v</TD><TD>$k2</TD><TD>$v2</TD></TR>;
>>>>>>> }
>>>>>>>
>>>>>>> Thanks,
>>>>>> No.
>>>>>>
>>>>>> However, you can use "each" to do the same thing, i.e.
>>>>>>
>>>>>> reset $array1;
>>>>>> reset $array2;
>>>>>>
>>>>>> for ((list($key1, $val1) = each($array1)) &&
>>>>>> (list($key2, $val2) = each($array2)) {
>>>>>> // $key1 and val1 contain the key and value for an element in $array1
>>>>>> // $key2 and val2 contain the key and value for an element in $array2
>>>>>> // Do your stuff here
>>>>>> }
>>>>>>
>>>>>> It will stop as soon as you run out of elements in either array.
>>>>> Ah, cool, I saw similar on the php.net. Is there a way to do it so
>>>>> that it will
>>>>> go thru all of both, even if one runs out?
>>>> What do you want to do with the array which runs out? And what do
>>>> you want to do with the array with items left?
>>> I figured the var that ran out would just be empty while the other
>>> var is still
>>> listing, eaching, etc. It might be handy to be able to specify a
>>> default value
>>> instead of empty, like &nbsp for the table exapmle above. Looks like
>>> I could
>>> just stick a little if() in Satya's code.
>>>
>>
>> OK, then try this:
>>
>> reset $array1;
>> reset $array2;
>>
>> for (($val1 = each($array1)) || ($val2 = each($array2)) {
>> if ($val1) { // false if at the end
>> // $val1['key'] contains the key
>> // $val1['value'] contains the value
>> echo $val1['key'] . '=>' $val1['value'];
>> }
>> else
>> echo '&nbsp;';
>> if ($val2) { // false if at the end
>> // $val2['key'] contains the key
>> // $val2['value'] contains the value
>> echo $val2['key'] . '=>' $val2['value'];
>> }
>> else
>> echo '&nbsp;';
>> }
>
> Hmmz, haven't tried it, but won't the second list argument only be run
> when the first fails, so in essence 2 foreach loops after one another?
>
>

Nope, both if statements are in the loop. Each time through it will
process $val1 then $val2.

Your suggestion of array_pad() is also good, unless the arrays are large.

--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================

[Back to original message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация