kneles90
kneles90

Reputation: 75

Make multiple PHP arrays out of a single array and store those new arrays into new single array

this might be a bit of a generic title, but I will try to explain my problem the best way I can.

So I've got this type of associative array:

 Array
 (
  [ICO_0] => checked
  [Investment_0] => checked
  [Investment_1] => checked
  [Marketing_1] => checked
)

What I would like to do is to divide it into multiple arrays based on numbers that are attached to the end of the key ( 0, 1 ... ). Basically I'd like to get a new array to look like this:

Array(
  Array(
    [ICO_0] => checked
    [Investment_0] => checked
    [Token Sale_0] => checked       
  ),
 Array(
    [Investment_1] => checked
    [Marketing_1] => checked
  )  
)

I've tried approaching this issue with array_chunk but couldn't get it to work.

I'll need this output since I want to sort those nested arrays based on items that they're holding, starting from the highest number of items.

Thanks!

Upvotes: 0

Views: 45

Answers (1)

Tomasz Lloyd
Tomasz Lloyd

Reputation: 521

You can use several different methods to accomplish this. One method is to loop through and explode the key name if you know there will always be an underscore, grab the last number, and use that as your index:

$results =  [
    "ICO_0" => "checked",
    "Investment_0" => "checked",
    "Investment_1" => "checked",
    "Marketing_1" => "checked",
    "Investment_2" => "checked",
    "Marketing_2" => "checked"
];

foreach($results as $key => $value){
    $ex = explode('_', $key);
    $new_result[end($ex)][$key] = $value;
}

Which for me returns the following:

array:3 [▼
    0 => array:2 [▼
        "ICO_0" => "checked"
        "Investment_0" => "checked"
    ]
    1 => array:2 [▼
        "Investment_1" => "checked"
        "Marketing_1" => "checked"
    ]
    2 => array:2 [▼
        "Investment_2" => "checked"
        "Marketing_2" => "checked"
    ]
]

Upvotes: 1

Related Questions