470,848 Members | 1,829 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 470,848 developers. It's quick & easy.

Make selection in array

Hi there.
I have this array:

name => john, age => 45, profession => teacher
name => hank, age => 22, profession => student
name => mary, age => 36, profession => dancer
etc.
etc.

It's going to be a big array.

Now what i wonder, how can i do the following;
while( $array['name'] == 22 )
{

do something.

}

I want to prevent the following:
while( $array )
{

if( 'name' == 22 ){

do something

}

}

Because this would create a big loop everytime.

Greetings Frizzle.

Jan 9 '06 #1
6 1472

Even in the first case, you will need to loop through the array to
pick up the "rows" where age=22 (I assume the 'name' was a typo). The
question also is what is a big loop? 100 iterations? 10000000 iterations?

/m

frizzle wrote:
Hi there.
I have this array:

name => john, age => 45, profession => teacher
name => hank, age => 22, profession => student
name => mary, age => 36, profession => dancer
etc.
etc.

It's going to be a big array.

Now what i wonder, how can i do the following;
while( $array['name'] == 22 )
{

do something.

}

I want to prevent the following:
while( $array )
{

if( 'name' == 22 ){

do something

}

}

Because this would create a big loop everytime.

Greetings Frizzle.

Jan 9 '06 #2
Marcin Dobrucki wrote:
Even in the first case, you will need to loop through the array to
pick up the "rows" where age=22 (I assume the 'name' was a typo). The
question also is what is a big loop? 100 iterations? 10000000 iterations?

/m

frizzle wrote:
Hi there.
I have this array:

name => john, age => 45, profession => teacher
name => hank, age => 22, profession => student
name => mary, age => 36, profession => dancer
etc.
etc.

It's going to be a big array.

Now what i wonder, how can i do the following;
while( $array['name'] == 22 )
{

do something.

}

I want to prevent the following:
while( $array )
{

if( 'name' == 22 ){

do something

}

}

Because this would create a big loop everytime.

Greetings Frizzle.


'Name' was a sloppy typo indeed :$, the array is going to be ca. 150
iterations, but with big chunks of text in them....

Frizzle.

Jan 9 '06 #3
frizzle wrote:
Hi there.
I have this array:

name => john, age => 45, profession => teacher
name => hank, age => 22, profession => student
name => mary, age => 36, profession => dancer
etc.
etc.

It's going to be a big array.

Now what i wonder, how can i do the following;
while( $array['name'] == 22 )
{

do something.

}

I want to prevent the following:
while( $array )
{

if( 'name' == 22 ){

do something

}

}

Because this would create a big loop everytime.

Greetings Frizzle.


There are many ways to accomplish the end goal and there are many methods and
functions and constructs and tools to accomplish those goals.

I would use a database interface - like mysql. then select only the data you
want/need.

psuedo-code

$array = "select name,age,profession from mytable where name = 22"

foreach ($array as $x)
{ do something
}

or if you do not want to see information where the age = 22 then:

$array = "select name,age,profession from mytable where name <> 22"

foreach ($array as $x)
{ do something
}

you can even use case statements do to other things if
$ select name,case when age = 22 then age = 0 else age=age end,profession
from mytable where age < 25;

Now read and act on only the required data.

--
Michael Austin.
Everything is easier when the appropriate tool is used. Ever try removing a
tire with just a screwdriver??? (neither have I)
Jan 9 '06 #4
frizzle wrote:
'Name' was a sloppy typo indeed :$, the array is going to be ca. 150
iterations, but with big chunks of text in them....


IMHO, 150 iterations isin't very much. Just make it work, and then
when it does, you can ponder if it can be optimized. If you are a DB
backend, then do as Michael suggested.

/M
Jan 10 '06 #5

Marcin Dobrucki wrote:
frizzle wrote:
'Name' was a sloppy typo indeed :$, the array is going to be ca. 150
iterations, but with big chunks of text in them....


IMHO, 150 iterations isin't very much. Just make it work, and then
when it does, you can ponder if it can be optimized. If you are a DB
backend, then do as Michael suggested.

/M


I am at a DB backend, but i want to prevent running unnessecary
queries, since they burden the DB when not needed. I guess i'll just
run through the array a couple of times then.
Thanks anyway. I was hoping for a sort of a DB query kind of solution,
like in my example,
regarding the items in the array as fiels names ...

while( $array['fieldname'] == 22 ) etc.

Too bad, but i got it working, and that's what's most important.

Greetings Frizzle.

Jan 10 '06 #6
frizzle wrote:
Marcin Dobrucki wrote:
frizzle wrote:

'Name' was a sloppy typo indeed :$, the array is going to be ca. 150
iterations, but with big chunks of text in them....


IMHO, 150 iterations isin't very much. Just make it work, and then
when it does, you can ponder if it can be optimized. If you are a DB
backend, then do as Michael suggested.

/M

I am at a DB backend, but i want to prevent running unnessecary
queries, since they burden the DB when not needed. I guess i'll just
run through the array a couple of times then.
Thanks anyway. I was hoping for a sort of a DB query kind of solution,
like in my example,
regarding the items in the array as fiels names ...

while( $array['fieldname'] == 22 ) etc.

Too bad, but i got it working, and that's what's most important.

Greetings Frizzle.


So, you're saying, How can I get DB functionality, oh and I don't want
to use my DB?!

If you're really concerned about performance, and you're going to do a
lot of searching by age, you can create an index by age, but you'll have
to cope with multiple elements:

$by_age = array();

foreach ($array as $item) {
$age = $item['age'];
if (!array_key_exists($age, $by_age)) {
$by_age[$age] = array();
}
$by_age[$age][] = $item;
};

Then you can go
foreach ($by_age[22] as $item) {
...
}

!!Not tested.!!
[Note that this will make the items in $by_age copies of those in
$array. If you need them to be references to the same object - because
you're going to alter them in one or other array and access them in the
other - you'll have to use references. IIRC this is tricky in PHP4,
because 'foreach' always gives you copies, but in PHP5 you can ask for
references.]

Colin
Jan 10 '06 #7

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

18 posts views Thread by booner | last post: by
2 posts views Thread by John Ryan | last post: by
1 post views Thread by neyugncul | last post: by
3 posts views Thread by Hodld | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.