FUDforum
Fast Uncompromising Discussions. FUDforum will get your users talking.

Home » Imported messages » comp.lang.php » Doubt regarding an array of references...
Show: Today's Messages :: Polls :: Message Navigator
Return to the default flat view Create a new topic Submit Reply
Re: Doubt regarding an array of references... [message #177515 is a reply to message #177509] Wed, 04 April 2012 08:48 Go to previous message
M. Strobel is currently offline  M. Strobel
Messages: 386
Registered: December 2011
Karma:
Senior Member
Am 03.04.2012 14:03, schrieb Jerry Stuckle:
> On 4/3/2012 7:39 AM, M. Strobel wrote:
>>
>> My 2ยข:
>>
>> The problem with the counted for-loop is tedious writing, and off-by-one error.
>>
>
> No error if you remember what you're doing. They can be tedious, but allow more
> control over the loop. The real problem here is the indicies must be integers and
> sequential.
>
> OTOH, foreach() loops process the elements in the order they were added to the array,
> which is not necessarily numeric order, i.e.
>
> $a = array(3=>4, 2=>5, 1=>6);
> foreach ($a as $v)
> echo "$v\n";
>
> prints
> 4
> 5
> 6
>
> Whereas
> for ($i = 1; i < 4; i++)
> echo "$v\n";
>
> prints
> 6
> 4
> 5
>
>> The problem with the foreach-loop is: don't forget to use the key when you want to
>> change values!
>>
>> This works:
>>
>> #--------------------------------
>> strobel@s114-intel:~> php -a
>> Interactive shell
>>
>> php> $a = array(1,2,3);
>> php> foreach ($a as $k=>$v) { $a[$k]++; }
>> php> var_dump($a);
>> array(3) {
>> [0]=>
>> int(2)
>> [1]=>
>> int(3)
>> [2]=>
>> int(4)
>> }
>> php> foreach ($a as $k=>$v) { $a[$k]*=4; }
>> php> var_dump($a);
>> array(3) {
>> [0]=>
>> int(8)
>> [1]=>
>> int(12)
>> [2]=>
>> int(16)
>> }
>> php>
>> #--------------------------
>>
>> I see references in PHP as "a can of worms", in PHP5 they are only necessary in very
>> special cases.
>>
>> /Str.
>>
>
> References are very handy - and prevent the need for such gyrations as you're going
> through.
>
> I find this much easier to understand:
>
> $a = array(1,2,3);
> foreach ($a as &$v) {
> $v++;
> }
>

more comments:

I wondered if your version is faster. It is a little slower:

Records read: 3.917.116, in seconds: 4.1342887878418
histogram_foreach in seconds: 1.2060449123383 "foreach ($a as $k=>$v)"
histogram_arraywalk in seconds: 2.3749718666077
histogram_whileeach in seconds: 2.9545080661774
histogram_foreach_r in seconds: 1.5193150043488 "foreach ($a as &$v)"

I am careful with generalizing benchmark results, this at least shows my "plain"
version has no performance penalty.

Anyway, my advice is: optimize for clearness && cleannes of code first.

/Str.
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: A little tip
Next Topic: How to etablish an SSH2 tunnel with php ?
Goto Forum:
  

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ]

Current Time: Tue Nov 26 13:36:19 GMT 2024

Total time taken to generate the page: 0.04012 seconds