Uno Mein Ame
Uno Mein Ame

Reputation: 1090

Stable sort an array of pipe-delimited strings only by the leading value

I have an array that contains entries that themselves contain two types of entries.

For simplicity sake, let's say that the entries are like this:

a|1
b|4
a|2
c|5
b|3

etc.

In fact they represent categories and subcategories in my database.

I will use explode to break these entries into letters and digits.

The question is: I want to group them by category.

What's the easiest way to create a multilevel array, which could be sorted by letters:

a|1
a|2
b|4
b|3
c|5

?

Upvotes: 0

Views: 80

Answers (3)

MeLight
MeLight

Reputation: 5565

I take it that your entries are strings (relying on the fact that you want to use explode() on them).

If so you can simply sort the array by using sort($array), and then iterate on that array and explode the values and put them in another array, which will be sorted by the previous array's order.

Upvotes: 0

Kokos
Kokos

Reputation: 9121

How about something like this?

$input  = array('a|1','b|4','a|2','c|5','b|3');
$output = array();

foreach($input as $i){

    list($key,$val) = explode("|",$i);
    $output[$key][] = $val;

}

Output:

Array
(
[a] => Array
    (
        [0] => 1
        [1] => 2
    )

[b] => Array
    (
        [0] => 4
        [1] => 3
    )

[c] => Array
    (
        [0] => 5
    )

)

Upvotes: 2

njmu83
njmu83

Reputation: 314

<?php

$your_array = array();

$your_array[a] = array('1','2','3');
$your_array[b] = array('4','5','6');

print_r($your_array);

?>

Upvotes: 0

Related Questions