php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #54259 Add SORT_NONE type to array_mulitsort
Submitted: 2011-03-15 20:49 UTC Modified: -
Votes:2
Avg. Score:4.0 ± 0.0
Reproduced:2 of 2 (100.0%)
Same Version:0 (0.0%)
Same OS:0 (0.0%)
From: brad dot froehle at gmail dot com Assigned:
Status: Open Package: Arrays related
PHP Version: 5.3.5 OS: OS X 10.6
Private report: No CVE-ID: None
Have you experienced this issue?
Rate the importance of this bug to you:

 [2011-03-15 20:49 UTC] brad dot froehle at gmail dot com
Description:
------------
It'd be useful to have a SORT_NONE option in the array_multisort function.  This 
would allow users to specify that they do not care to sort along a particular 
index.

In the sample code below, I've attached one possible use arising in Drupal. (See 
http://drupal.org/node/972536).  Generically, we want to sort some array ($menu) 
before inserting it into the database.  To do so, we first compute the desired 
sort order ($sort) and then call the array_multisort function as
  array_multisort($sort, SORT_NUMERIC, $menu);

This works great, sorting $menu according to the sort order in $sort, however if 
$menu contains any objects the array_multisort function throws an error (Notice: 
Object of class stdClass could not be converted to int in ...).

I'm proposing the addition of a SORT_NONE option so that the function call could 
instead be
  array_multisort($sort, SORT_NUMERIC, $menu, SORT_NONE);
This would not throw an error since no comparisons would be done with the 
attributes of $menu.

Implementing this should be relatively straightforward, I would imagine.

Test script:
---------------
$sort = array(
  'A' => 2,
  'A' => 1,
  'B' => 1,
);
$menu['A'] = array(
  'access' => array(1),
);
$menu['B'] = array(
  'access' => array((object) array('a', 'b')),
);
$menu['C'] = array(
  'access' => array(0),
);

array_multisort($sort, SORT_NUMERIC, $menu, SORT_NONE);


Expected result:
----------------
$sort =
Array
(
    [C] => 1
    [B] => 1
    [A] => 2
)

$menu =
Array
(
    [C] => Array
        (
            [access] => Array
                (
                    [0] => 0
                )

        )

    [B] => Array
        (
            [access] => Array
                (
                    [0] => stdClass Object
                        (
                            [0] => a
                            [1] => b
                        )

                )

        )

    [A] => Array
        (
            [access] => Array
                (
                    [0] => 1
                )

        )

)


Actual result:
--------------
(Not applicable, since this is a feature request).

Patches

Add a Patch

Pull Requests

Add a Pull Request

 
PHP Copyright © 2001-2017 The PHP Group
All rights reserved.
Last updated: Sun Nov 19 01:31:42 2017 UTC