RE: [PHP] Multidimensional array construction

2001-12-07 Thread Tim Ward

I haven't seen the rest of this thread so this may be irrelevant ... but

foreach($array as $key=$value)
{   $array[$key] = fred;
}

... alters an array while traversing it. Your case seems more complicated
but I would have thought nesting foreaches in this way would allow you to
access the original element.


foreach($array as $key1=$value1)
{   foreach($array as $key2=$value2)
{   $array[$key1][$key2] = fred;
}
}

Tim
http://www.chessish.com http://www.chessish.com 


--
From:  Darren Gamble [SMTP:[EMAIL PROTECTED]]
Sent:  04 December 2001 15:22
To:  PHP List; 'Mike Eheler'
Subject:  RE: [PHP] Multidimensional array construction

Good day,

Thanks to all who replied.

This isn't quite what I needed, though.  I _have_ the array (or
delimited
list would do, too).  What I need to do is _CREATE_ the array
element
$myarray['foo']['bar']['green']['apple'] and set it to some value.
Actually
traversing said array isn't hard, as you pointed out.

foreach() doesn't work, as it just uses a copy of the original
array.  I
think there might be some way to use variable references, but I
haven't
gotten one to work yet.

Any other suggestions?


Darren Gamble
Planner, Regional Services
Shaw Cablesystems GP
630 - 3rd Avenue SW
Calgary, Alberta, Canada
T2P 4L4
(403) 781-4948


-Original Message-
From: Mike Eheler [mailto:[EMAIL PROTECTED]]
Sent: Monday, December 03, 2001 5:30 PM
To: Martin Towell
Cc: 'Darren Gamble'; PHP List
Subject: Re: [PHP] Multidimensional array construction


I did something like this recently. Here's how I did it:

$some_value1 = 'Hello World';
$myarray['foo']['bar']['green']['apple'] = $some_value1;

function get_opt($arr, $keys,$sep=':') {
$var = $arr;
$tmp = split($sep,$keys);
foreach ($tmp as $k = $v) {
$var = $var[$v];
}
if (isset($var)) return $var;
return '';
}

echo get_opt($myarray, 'foo:bar:green:apple');

It needs refining, but it should do the job. That's entirely from 
memory, mind you.. it should work, though.

Mike

Martin Towell wrote:

I was thinking that you could use a pointer to var, eg:
$var = 'myarray[foo][bar][red][apple]';
// this would obviously be created dynamically, hard coded for
testing
$$var = $some_value1;
echo $myarray[foo][bar][red][apple];
but when I tried it, it didn't work :(
looks like eval() to the rescue...

-Original Message-
From: Darren Gamble [mailto:[EMAIL PROTECTED]]
Sent: Tuesday, December 04, 2001 10:37 AM
To: PHP List
Subject: [PHP] Multidimensional array construction


Here's a question for the list:

I have a two-dimensional array; essentially a list of arrays.  Each
element
(an array) can have any number of elements.  As a small example:

(
  ( foo , bar , red , apple ),
  ( foo , bar , red , car),
  ( foo , green )
)

I would like to traverse this array and place all of the data into
another
multidimensional array.  The following statements illustrate how
I'd like
to
do this from the example:

$myarray[foo][bar][red][apple] = $some_value1;
$myarray[foo][bar][red][car]   = $some_value2;
$myarray[foo][green]   = $some_value3;

Is there any way to easily do this in PHP?  I could cheat and use
eval(),
but there is probably a better way.  I have thought of using each()
or
references, but nothing has come to mind so far. 

Any ideas?  Should I just use eval() ?


Darren Gamble
Planner, Regional Services
Shaw Cablesystems GP
630 - 3rd Avenue SW
Calgary, Alberta, Canada
T2P 4L4
(403) 781-4948



-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]




RE: [PHP] Multidimensional array construction

2001-12-04 Thread Darren Gamble

Good day,

Thanks to all who replied.

This isn't quite what I needed, though.  I _have_ the array (or delimited
list would do, too).  What I need to do is _CREATE_ the array element
$myarray['foo']['bar']['green']['apple'] and set it to some value.  Actually
traversing said array isn't hard, as you pointed out.

foreach() doesn't work, as it just uses a copy of the original array.  I
think there might be some way to use variable references, but I haven't
gotten one to work yet.

Any other suggestions?


Darren Gamble
Planner, Regional Services
Shaw Cablesystems GP
630 - 3rd Avenue SW
Calgary, Alberta, Canada
T2P 4L4
(403) 781-4948


-Original Message-
From: Mike Eheler [mailto:[EMAIL PROTECTED]]
Sent: Monday, December 03, 2001 5:30 PM
To: Martin Towell
Cc: 'Darren Gamble'; PHP List
Subject: Re: [PHP] Multidimensional array construction


I did something like this recently. Here's how I did it:

$some_value1 = 'Hello World';
$myarray['foo']['bar']['green']['apple'] = $some_value1;

function get_opt($arr, $keys,$sep=':') {
$var = $arr;
$tmp = split($sep,$keys);
foreach ($tmp as $k = $v) {
$var = $var[$v];
}
if (isset($var)) return $var;
return '';
}

echo get_opt($myarray, 'foo:bar:green:apple');

It needs refining, but it should do the job. That's entirely from 
memory, mind you.. it should work, though.

Mike

Martin Towell wrote:

I was thinking that you could use a pointer to var, eg:
$var = 'myarray[foo][bar][red][apple]';
// this would obviously be created dynamically, hard coded for testing
$$var = $some_value1;
echo $myarray[foo][bar][red][apple];
but when I tried it, it didn't work :(
looks like eval() to the rescue...

-Original Message-
From: Darren Gamble [mailto:[EMAIL PROTECTED]]
Sent: Tuesday, December 04, 2001 10:37 AM
To: PHP List
Subject: [PHP] Multidimensional array construction


Here's a question for the list:

I have a two-dimensional array; essentially a list of arrays.  Each element
(an array) can have any number of elements.  As a small example:

(
  ( foo , bar , red , apple ),
  ( foo , bar , red , car),
  ( foo , green )
)

I would like to traverse this array and place all of the data into another
multidimensional array.  The following statements illustrate how I'd like
to
do this from the example:

$myarray[foo][bar][red][apple] = $some_value1;
$myarray[foo][bar][red][car]   = $some_value2;
$myarray[foo][green]   = $some_value3;

Is there any way to easily do this in PHP?  I could cheat and use eval(),
but there is probably a better way.  I have thought of using each() or
references, but nothing has come to mind so far. 

Any ideas?  Should I just use eval() ?


Darren Gamble
Planner, Regional Services
Shaw Cablesystems GP
630 - 3rd Avenue SW
Calgary, Alberta, Canada
T2P 4L4
(403) 781-4948



-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]




RE: [PHP] Multidimensional array construction

2001-12-03 Thread Martin Towell

I was thinking that you could use a pointer to var, eg:
$var = 'myarray[foo][bar][red][apple]';
// this would obviously be created dynamically, hard coded for testing
$$var = $some_value1;
echo $myarray[foo][bar][red][apple];
but when I tried it, it didn't work :(
looks like eval() to the rescue...

-Original Message-
From: Darren Gamble [mailto:[EMAIL PROTECTED]]
Sent: Tuesday, December 04, 2001 10:37 AM
To: PHP List
Subject: [PHP] Multidimensional array construction


Here's a question for the list:

I have a two-dimensional array; essentially a list of arrays.  Each element
(an array) can have any number of elements.  As a small example:

(
  ( foo , bar , red , apple ),
  ( foo , bar , red , car),
  ( foo , green )
)

I would like to traverse this array and place all of the data into another
multidimensional array.  The following statements illustrate how I'd like to
do this from the example:

$myarray[foo][bar][red][apple] = $some_value1;
$myarray[foo][bar][red][car]   = $some_value2;
$myarray[foo][green]   = $some_value3;

Is there any way to easily do this in PHP?  I could cheat and use eval(),
but there is probably a better way.  I have thought of using each() or
references, but nothing has come to mind so far. 

Any ideas?  Should I just use eval() ?


Darren Gamble
Planner, Regional Services
Shaw Cablesystems GP
630 - 3rd Avenue SW
Calgary, Alberta, Canada
T2P 4L4
(403) 781-4948

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]



RE: [PHP] Multidimensional array construction

2001-12-03 Thread Jim

This might be interesting ...

The function extract() allows you to extract all values from an array 
and prefix them with a specified string. What I didn't know until 
just a second ago was that you can supply a function as a string, so 
...

$my_array = array(a,b,c,d,array(a,b,c,d));

$i = 1;

extract($my_array,EXTR_PREFIX_ALL,SOMEVAL.$i++);

print pre;

print $SOMEVAL_1;
print $SOMEVAL_2;
print $SOMEVAL_3;
print $SOMEVAL_4;
print $SOMEVAL_5;

print /pre;

... will produce:

a
b
c
d
[Array]

Which is cool. Not quite what you wanted, but maybe you could run with it.

Jim




-Original Message-
From: Darren Gamble [mailto:[EMAIL PROTECTED]]
Sent: Tuesday, December 04, 2001 10:37 AM
To: PHP List
Subject: [PHP] Multidimensional array construction


Here's a question for the list:

I have a two-dimensional array; essentially a list of arrays.  Each element
(an array) can have any number of elements.  As a small example:

(
   ( foo , bar , red , apple ),
   ( foo , bar , red , car),
   ( foo , green )
)

I would like to traverse this array and place all of the data into another
multidimensional array.  The following statements illustrate how I'd like to
do this from the example:

$myarray[foo][bar][red][apple] = $some_value1;
$myarray[foo][bar][red][car]   = $some_value2;
$myarray[foo][green]   = $some_value3;

Is there any way to easily do this in PHP?  I could cheat and use eval(),
but there is probably a better way.  I have thought of using each() or
references, but nothing has come to mind so far.

Any ideas?  Should I just use eval() ?


Darren Gamble
Planner, Regional Services
Shaw Cablesystems GP
630 - 3rd Avenue SW
Calgary, Alberta, Canada
T2P 4L4
(403) 781-4948

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]


-- 
Jim Musil
-
Multimedia Programmer
Nettmedia
-
212-629-0004
[EMAIL PROTECTED]

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]




RE: [PHP] Multidimensional array construction

2001-12-03 Thread Jim


oops. That's not correct. I wish it was though! ;)


This might be interesting ...

The function extract() allows you to extract all values from an 
array and prefix them with a specified string. What I didn't know 
until just a second ago was that you can supply a function as a 
string, so ...

$my_array = array(a,b,c,d,array(a,b,c,d));

$i = 1;

extract($my_array,EXTR_PREFIX_ALL,SOMEVAL.$i++);

print pre;

print $SOMEVAL_1;
print $SOMEVAL_2;
print $SOMEVAL_3;
print $SOMEVAL_4;
print $SOMEVAL_5;

print /pre;

... will produce:

a
b
c
d
[Array]

Which is cool. Not quite what you wanted, but maybe you could run with it.

Jim



-Original Message-
From: Darren Gamble [mailto:[EMAIL PROTECTED]]
Sent: Tuesday, December 04, 2001 10:37 AM
To: PHP List
Subject: [PHP] Multidimensional array construction


Here's a question for the list:

I have a two-dimensional array; essentially a list of arrays.  Each element
(an array) can have any number of elements.  As a small example:

(
   ( foo , bar , red , apple ),
   ( foo , bar , red , car),
   ( foo , green )
)

I would like to traverse this array and place all of the data into another
multidimensional array.  The following statements illustrate how I'd like to
do this from the example:

$myarray[foo][bar][red][apple] = $some_value1;
$myarray[foo][bar][red][car]   = $some_value2;
$myarray[foo][green]   = $some_value3;

Is there any way to easily do this in PHP?  I could cheat and use eval(),
but there is probably a better way.  I have thought of using each() or
references, but nothing has come to mind so far.

Any ideas?  Should I just use eval() ?


Darren Gamble
Planner, Regional Services
Shaw Cablesystems GP
630 - 3rd Avenue SW
Calgary, Alberta, Canada
T2P 4L4
(403) 781-4948

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]


--
Jim Musil
-
Multimedia Programmer
Nettmedia
-
212-629-0004
[EMAIL PROTECTED]

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]


-- 
Jim Musil
-
Multimedia Programmer
Nettmedia
-
212-629-0004
[EMAIL PROTECTED]

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]




Re: [PHP] Multidimensional array construction

2001-12-03 Thread Mike Eheler

I did something like this recently. Here's how I did it:

$some_value1 = 'Hello World';
$myarray['foo']['bar']['green']['apple'] = $some_value1;

function get_opt($arr, $keys,$sep=':') {
$var = $arr;
$tmp = split($sep,$keys);
foreach ($tmp as $k = $v) {
$var = $var[$v];
}
if (isset($var)) return $var;
return '';
}

echo get_opt($myarray, 'foo:bar:green:apple');

It needs refining, but it should do the job. That's entirely from 
memory, mind you.. it should work, though.

Mike

Martin Towell wrote:

I was thinking that you could use a pointer to var, eg:
$var = 'myarray[foo][bar][red][apple]';
// this would obviously be created dynamically, hard coded for testing
$$var = $some_value1;
echo $myarray[foo][bar][red][apple];
but when I tried it, it didn't work :(
looks like eval() to the rescue...

-Original Message-
From: Darren Gamble [mailto:[EMAIL PROTECTED]]
Sent: Tuesday, December 04, 2001 10:37 AM
To: PHP List
Subject: [PHP] Multidimensional array construction


Here's a question for the list:

I have a two-dimensional array; essentially a list of arrays.  Each element
(an array) can have any number of elements.  As a small example:

(
  ( foo , bar , red , apple ),
  ( foo , bar , red , car),
  ( foo , green )
)

I would like to traverse this array and place all of the data into another
multidimensional array.  The following statements illustrate how I'd like to
do this from the example:

$myarray[foo][bar][red][apple] = $some_value1;
$myarray[foo][bar][red][car]   = $some_value2;
$myarray[foo][green]   = $some_value3;

Is there any way to easily do this in PHP?  I could cheat and use eval(),
but there is probably a better way.  I have thought of using each() or
references, but nothing has come to mind so far. 

Any ideas?  Should I just use eval() ?


Darren Gamble
Planner, Regional Services
Shaw Cablesystems GP
630 - 3rd Avenue SW
Calgary, Alberta, Canada
T2P 4L4
(403) 781-4948




-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]