1

How can we sort an associative array with custom order? My array look like this

Array
(
    [pa_color] => Array
        (
            [name] => pa_color
            [value] => 
            [position] => 0
            [is_visible] => 1
            [is_variation] => 1
            [is_taxonomy] => 1
        )

    [pa_dimension] => Array
        (
            [name] => pa_dimension
            [value] => 
            [position] => 1
            [is_visible] => 1
            [is_variation] => 0
            [is_taxonomy] => 1
        )

    [pa_travel-duration] => Array
        (
            [name] => pa_travel-duration
            [value] => 
            [position] => 2
            [is_visible] => 1
            [is_variation] => 0
            [is_taxonomy] => 1
        )

    [pa_travel-type] => Array
        (
            [name] => pa_travel-type
            [value] => 
            [position] => 3
            [is_visible] => 1
            [is_variation] => 0
            [is_taxonomy] => 1
        )

    [pa_travelling-with] => Array
        (
            [name] => pa_travelling-with
            [value] => 
            [position] => 4
            [is_visible] => 1
            [is_variation] => 0
            [is_taxonomy] => 1
        )

    [pa_volume] => Array
        (
            [name] => pa_volume
            [value] => 
            [position] => 5
            [is_visible] => 1
            [is_variation] => 0
            [is_taxonomy] => 1
        )

    [pa_weight] => Array
        (
            [name] => pa_weight
            [value] => 
            [position] => 6
            [is_visible] => 1
            [is_variation] => 0
            [is_taxonomy] => 1
        )

)

and i want this array is like pa_travel-duration first pa_volume second ?? I know there is a native php function usort but i could not understand this.

u_mulder
  • 54,101
  • 5
  • 48
  • 64

2 Answers2

0

This will do the work, but im pretty sure there's much better ways to do it:

Code:

$array = array("pa_color" => "color",  
              "pa_dimension" => "dimension", 
              "pa_travel-duration" => "Random Stuff: " . rand(100,999),
              "pa_volume" => "volumen"
              );
$tmp = array("pa_travel-duration" =>  $array["pa_travel-duration"],  
            "pa_volume" =>  $array["pa_volume"], 
);

unset($array["pa_travel-duration"], $array["pa_volume"]);
$array = array_merge($tmp,$array);


print_r($array);

Result:

Array
(
    [pa_travel-duration] => Random Stuff: 127
    [pa_volume] => volumen
    [pa_color] => color
    [pa_dimension] => dimension
)

Take care because if the array doesn't have the proper key it will throw an error, you need to add few checks there.

Troyer
  • 6,765
  • 3
  • 34
  • 62
0
$sort_by = array('pa_travel-duration', 'pa_volume', 'pa_color','pa_dimension','pa_travel-type','pa_travelling-with','pa_weight');
$temp_arr = array();
foreach ($sort_by as $key) {
    $temp_arr[$key] = $data[$key];
}
$data = $temp_arr;

echo '<pre>'; print_r($data);

Define your order in $sort_by array

hrishi
  • 1,610
  • 6
  • 26
  • 43