Welcome to WebmasterWorld Guest from 54.167.46.29

Forum Moderators: coopster & jatar k

Message Too Old, No Replies

PHP array key issue

     
2:50 pm on Jun 10, 2012 (gmt 0)

New User

5+ Year Member

joined:Oct 28, 2008
posts: 10
votes: 0


Hi there,

I have the following code accessing values from an associative array:


foreach ($genders[$lang] as $value) {

if($value==true) {

echo key($genders[$lang]);

}

next($genders[$lang]);

}


The key function however only echoes the key name of row 1, it seems to be skipping row 0. The contents of the array are:


Array ( [m] => 1 [f] => 1 [n] => 1 [c] => [mp] => [ma] => [mi] => )


So when I run the above code I get the output "fnc" instead of "mfn". Itís as if the if statement is detecting the correct row but the key function is not.

Iíve tried Googling around this but to no avail, I wonder if any of you guys can help :)


Max
4:18 pm on June 11, 2012 (gmt 0)

Senior Member

WebmasterWorld Senior Member rocknbil is a WebmasterWorld Top Contributor of All Time 10+ Year Member

joined:Nov 28, 2004
posts:7999
votes: 0


Generally there's no reason to use next in a for/foreach loop, and may have something to do with it. It's not like a "next" in any other languages, it is used to advance the pointer within the loop (instead of just going to the next item.) It advances the pointer by one (one more than it would in a normal for/foreach.)

You don't need to evaluate true/false, 1/0 if your array values could be empty or null. It is, or it is not, allowing you to try a more simple method:


foreach ($genders[$lang] as $value) {
if($value) {
echo key($genders[$lang]);
}
}
8:43 pm on June 11, 2012 (gmt 0)

Full Member

joined:Mar 22, 2011
posts:339
votes: 0


The use of
next()
is what's messing things up. The
foreach
loop automatically advances to the next element in the array, so there's no need for you to do it "manually".

Note: It's best to be as explicit as possible. Yes,
if( $value == true )
and
if( $value )
will work if
$value
is
true
,
1
, or
"1"
, but it will also "work" if
$value
is
"foo"
. That's probably not a good thing.

Your
if( $value == true )
should be
if( $value === 1 )
(if
$value
is an actual integer) or, even better,
if( 1 === $value )
. Getting into the habit of placing the variable on the right means that you avoid this sort of "whoops!" moment:
if( $value = 1 )
.

--
Ryan
 

Join The Conversation

Moderators and Top Contributors

Hot Threads This Week

Featured Threads

Free SEO Tools

Hire Expert Members