In the below example, it would deconstruct as such:


$tValues = array(

     'ID1-1' => array(

           'ID2-1' => array(

                'ID3-1' => 'Value1',

                'ID3-2' => 'Value2',

           ),

           'ID2-2' => array(

                'ID3-3' => 'Value3',

                'ID3-4' => 'Value4',

           ),

     ),

);



Given this foreach line:

foreach($tValues as $ID1 => [$ID2 => [$ID3 => $Value] ]) {

     /* Do something */

}



I would expect the log to be as:

                First Loop:

                                $tValues is iterated, assigning ID1-1 to $ID1 
and array(

                                                'ID2-1' => array(

                                                                'ID3-1' => 
'Value1',

                                                                'ID3-2' => 
'Value2',

                                                ),

                                                'ID2-2' => array(

                                                                'ID3-3' => 
'Value3',

                                                                'ID3-4' => 
'Value4',

                                                ),

                                ), to the first decomposition



                                Which would decompose the $ID2 and its first 
value, etc.



I see what you mean by your comments, it would need to intelligently iterate 
through the lowest element arrays first on up.



The above example, if iterated through, each loop I would expect to have these 
values:

Iteration  ID1       ID2       ID3       Value

     ------------------------------------------------

     0         ID1-1      ID2-1      ID3-1      Value1

     1         ID1-1      ID2-1      ID3-2      Value2

     2         ID1-1      ID2-2      ID3-3      Value3

     3          ID1-1      ID2-2      ID3-4      Value4





I was referring to the Array destructuring section of this document:

https://developer.mozilla.org/en/JavaScript/New_in_JavaScript/1.7#Array_comprehensions



Though a great many of the other discussions on that page would be really 
incredible for PHP as well.



I see on that document it does not talk about a complex destructuring such as 
I've described above.



My email here was to find if this would garner any interest from the PHP 
community.





> -----Original Message-----

> From: Ivan Enderlin @ Hoa [mailto:ivan.ender...@hoa-project.net]

> Sent: Sunday, May 13, 2012 12:11 PM

> To: internals@lists.php.net

> Subject: Re: [PHP-DEV] Array decomposition, more than list()

>

> Hi Clint,

>

> On 13/05/12 18:41, Clint Priest wrote:

> > I've been using array decomposition in other languages such as Javascript 
> > recently and find it very useful.  I did not find any

> conversation about it in the archives, has this topic been 
> discussed/vetted/shot down already?

> >

> > Example use case: Indexed database results being iterated:

> >

> > Input:

> > $tValues[$dbRow['ID1']][$dbRow['ID2']][$dbRow['ID3']] =

> > $dbRow['Value'];

> >

> > Output:

> > foreach($tValues as $ID1 => $tSubValues1) {

> >      foreach($tSubValues1 as $ID2 => $tSubValues2) {

> >          foreach($tSubValues2 as $ID3 => $Value) {

> >              /* Do something, such as build an SQL insert */

> >          }

> >      }

> > }

> >

> > The above is a semi-common piece of code in our production application, I 
> > could see list decomposition as a very convenient

> alternative.

> >

> > New functionality would support:

> >

> > foreach($tValues as $ID1 => [$ID2 => [$ID3 => $Value] ]) {

> >      /* Do something */

> > }

> >

> > The above also would indicate that associative array key decomposition 
> > would also be allowed.  I don't believe anything like the

> above is possible, even outside of a foreach loop, but perhaps I am wrong 
> there.

> The semantics of list() and foreach are different. A list() extracts data in 
> variables, whereas a foreach is a loop that iterates over a

> structured data. Of course, I assume you know that. But what is the semantics 
> you give to foreach($array as $key1 => [$key2 =>

> [$key3 => $value]])? Are you interating on $key1, then $key2, then $key3, or 
> just unfolding/extracting these variables? In other

> terms, what happened when

> $key1 has more than 1 value? Do we iterate or extract? It is not clear here.

> Could you point out some references (e.g. from Javascript)?

>

> Best regards.

>

> --

> Ivan Enderlin

> Developer of Hoa

> http://hoa.42/ or http://hoa-project.net/

>

> PhD. student at DISC/Femto-ST (Vesontio) and INRIA (Cassis) 
> http://disc.univ-fcomte.fr/ and http://www.inria.fr/

>

> Member of HTML and WebApps Working Group of W3C http://w3.org/

>

>

>

>

> --

> PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: 
> http://www.php.net/unsub.php


Reply via email to