0

I have an aray as follows, It is a single dimensional array. I would like to create a 2 dimensional array from this array using the product key as values.

How to create such a multi dimensional array?

   Array
(
    [0] => Array
        (
            [0] => God 
            [listitemname] => God 
            [1] => 20a3208eca59
            [upload_key] => 20a3208eca59
            [2] => d296772dd9045b1d99e0ff5a
            [file_key] => d296772dd9045b1d99e0ff5a
            [3] => a4e4eb6d7621e585d66b424ece08
            [folderkey] => a4e4eb6d7621e585d66b424ece08
            [4] => d9ef5a3cacbc
            [productkey] => d9ef5a3cacbc
            [5] => 1
            [file_type] => 1
        )

    [1] => Array
        (
            [0] => God 
            [listitemname] => God 
            [1] => 877ede85abd9
            [upload_key] => 877ede85abd9
            [2] => 5a769542b3f75c78a6fd9bda
            [file_key] => 5a769542b3f75c78a6fd9bda
            [3] => dfcc7d5523de534dd1d148a67f6f
            [folderkey] => dfcc7d5523de534dd1d148a67f6f
            [4] => d9ef5a3cacbc
            [productkey] => d9ef5a3cacbc
            [5] => 2
            [file_type] => 2
        )

    [2] => Array
        (
            [0] => God 
            [listitemname] => God 
            [1] => 32d8dbdb7d31
            [upload_key] => 32d8dbdb7d31
            [2] => 413057623b1d11617e4eba71
            [file_key] => 413057623b1d11617e4eba71
            [3] => 3cd3bab180cc1ce6350ec6b29c46
            [folderkey] => 3cd3bab180cc1ce6350ec6b29c46
            [4] => d9ef5a3cacbc
            [productkey] => d9ef5a3cacbc
            [5] => 4
            [file_type] => 4
        )

    [3] => Array
        (
            [0] => God 
            [listitemname] => God 
            [1] => 93854a71f69e
            [upload_key] => 93854a71f69e
            [2] => ddd697e3ec13dd49a987f17b
            [file_key] => ddd697e3ec13dd49a987f17b
            [3] => e41ff80e0a18b6cb4cf874730b52
            [folderkey] => e41ff80e0a18b6cb4cf874730b52
            [4] => d9ef5a3cacbc
            [productkey] => d9ef5a3cacbc
            [5] => 5
            [file_type] => 5
        )

    [4] => Array
        (
            [0] => Games
            [listitemname] => Games
            [1] => 17eec2f803be
            [upload_key] => 17eec2f803be
            [2] => 54f74c98ecb267ee5da74da1
            [file_key] => 54f74c98ecb267ee5da74da1
            [3] => dc035e3347f429f4b12d1af00d7a
            [folderkey] => dc035e3347f429f4b12d1af00d7a
            [4] => 4c8a0251e489
            [productkey] => 4c8a0251e489
            [5] => 1
            [file_type] => 1
        )

    [5] => Array
        (
            [0] => Games
            [listitemname] => Games
            [1] => df9c2041eff0
            [upload_key] => df9c2041eff0
            [2] => d65e22242ca45cbf935af4b9
            [file_key] => d65e22242ca45cbf935af4b9
            [3] => 45f1ace431926347aa1fcf1ae2c6
            [folderkey] => 45f1ace431926347aa1fcf1ae2c6
            [4] => 4c8a0251e489
            [productkey] => 4c8a0251e489
            [5] => 2
            [file_type] => 2
        )

    [6] => Array
        (
            [0] => Games
            [listitemname] => Games
            [1] => 934380f97ae1
            [upload_key] => 934380f97ae1
            [2] => 684505352bb62e8c61ea8c8c
            [file_key] => 684505352bb62e8c61ea8c8c
            [3] => 2b86c8f004f97bad9600f0e23eed
            [folderkey] => 2b86c8f004f97bad9600f0e23eed
            [4] => 4c8a0251e489
            [productkey] => 4c8a0251e489
            [5] => 4
            [file_type] => 4
        )

    [7] => Array
        (
            [0] => Games
            [listitemname] => Games
            [1] => c85be159256e
            [upload_key] => c85be159256e
            [2] => eee3f59502b57e07fd83a9b1
            [file_key] => eee3f59502b57e07fd83a9b1
            [3] => 9ec2158c662b2c0068308bc461fa
            [folderkey] => 9ec2158c662b2c0068308bc461fa
            [4] => 4c8a0251e489
            [productkey] => 4c8a0251e489
            [5] => 5
            [file_type] => 5
        )

)

I would like to get a 2 dimensional array , having all the product keys as keyas and coresponding records as value as show below

    Array
(
    [d9ef5a3cacbc] => Array{
        [0](
            [0] => God 
            [listitemname] => God 
            [1] => 20a3208eca59
            [upload_key] => 20a3208eca59
            [2] => d296772dd9045b1d99e0ff5a
            [file_key] => d296772dd9045b1d99e0ff5a
            [3] => a4e4eb6d7621e585d66b424ece08
            [folderkey] => a4e4eb6d7621e585d66b424ece08
            [4] => d9ef5a3cacbc
            [productkey] => d9ef5a3cacbc
            [5] => 1
            [file_type] => 1
        )
    [1] (
            [0] => God 
            [listitemname] => God 
            [1] => 877ede85abd9
            [upload_key] => 877ede85abd9
            [2] => 5a769542b3f75c78a6fd9bda
            [file_key] => 5a769542b3f75c78a6fd9bda
            [3] => dfcc7d5523de534dd1d148a67f6f
            [folderkey] => dfcc7d5523de534dd1d148a67f6f
            [4] => d9ef5a3cacbc
            [productkey] => d9ef5a3cacbc
            [5] => 2
            [file_type] => 2
        )
    [2]        (
            [0] => God 
            [listitemname] => God 
            [1] => 32d8dbdb7d31
            [upload_key] => 32d8dbdb7d31
            [2] => 413057623b1d11617e4eba71
            [file_key] => 413057623b1d11617e4eba71
            [3] => 3cd3bab180cc1ce6350ec6b29c46
            [folderkey] => 3cd3bab180cc1ce6350ec6b29c46
            [4] => d9ef5a3cacbc
            [productkey] => d9ef5a3cacbc
            [5] => 4
            [file_type] => 4
        )
    [3] (
            [0] => God 
            [listitemname] => God 
            [1] => 93854a71f69e
            [upload_key] => 93854a71f69e
            [2] => ddd697e3ec13dd49a987f17b
            [file_key] => ddd697e3ec13dd49a987f17b
            [3] => e41ff80e0a18b6cb4cf874730b52
            [folderkey] => e41ff80e0a18b6cb4cf874730b52
            [4] => d9ef5a3cacbc
            [productkey] => d9ef5a3cacbc
            [5] => 5
            [file_type] => 5


    }

    [4c8a0251e489] => Array{
        [0](
            [0] => Games
            [listitemname] => Games
            [1] => 17eec2f803be
            [upload_key] => 17eec2f803be
            [2] => 54f74c98ecb267ee5da74da1
            [file_key] => 54f74c98ecb267ee5da74da1
            [3] => dc035e3347f429f4b12d1af00d7a
            [folderkey] => dc035e3347f429f4b12d1af00d7a
            [4] => 4c8a0251e489
            [productkey] => 4c8a0251e489
            [5] => 1
            [file_type] => 1
        )
    [1] (
[0] => Games
            [listitemname] => Games
            [1] => 934380f97ae1
            [upload_key] => 934380f97ae1
            [2] => 684505352bb62e8c61ea8c8c
            [file_key] => 684505352bb62e8c61ea8c8c
            [3] => 2b86c8f004f97bad9600f0e23eed
            [folderkey] => 2b86c8f004f97bad9600f0e23eed
            [4] => 4c8a0251e489
            [productkey] => 4c8a0251e489
            [5] => 4
            [file_type] => 4
        )
    [2]        (
            [0] => Games
            [listitemname] => Games
            [1] => c85be159256e
            [upload_key] => c85be159256e
            [2] => eee3f59502b57e07fd83a9b1
            [file_key] => eee3f59502b57e07fd83a9b1
            [3] => 9ec2158c662b2c0068308bc461fa
            [folderkey] => 9ec2158c662b2c0068308bc461fa
            [4] => 4c8a0251e489
            [productkey] => 4c8a0251e489
            [5] => 5
            [file_type] => 5
        )

}
4
  • 3
    this is not a single dimensional array Commented Feb 14, 2012 at 21:11
  • 2
    in fact, it already IS as 2-dimensional array Commented Feb 14, 2012 at 21:13
  • yea, I feel like your examples are kinda wonky... Commented Feb 14, 2012 at 21:13
  • So you want to group the inner arrays by their productkeys? Commented Feb 14, 2012 at 21:15

1 Answer 1

2

Not sure what you've tried, but this looks like it does what you need it to.

$res = array();

// assuming you want an array by product key
foreach($outer as $inner)
{
    $key = $inner['productKey'];
    if(!isset($res[$key]))
        $res[$key] = array();
    $res[$key][] = $inner;
}
// $res now holds what you're looking for

Now, it looks like you are looking for something slightly more complicated:

function not_numeric($a){return !is_numeric($a);}

// you only care about the non-numeric keys of the arrays.
$keys = array_map('not_numeric', array_keys($outer[0]));
$res = array();
foreach($keys as $key)
{
   // same idea as above, only nested this time.
   if(!isset($res[$key]))
       $res[$key] = array();
   // this is exactly the same as the first example, only with an additional
   // lookup. You can make this better by judicious use of references, but
   // that is an exercise up to the reader.
   foreach($outer as $inner)
   {
        $inKey = $inner[$key];
        if(!isset($res[$key][$inKey]))
            $res[$key][$inKey] = array();
        $res[$key][$inKey][] = $inner;
   }
}

// $res now holds what you're looking for

Just as an observation, this structure is incredibly inefficient, and while it might be improved by adding references and the like, you probably want to re-think your data structure.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.