PHP-sort arrays by key

very OT, I hope I'm not abusing this forum... If someone can
help, great!
Say I have a large array, called $orders, looking like this:
Array
[retail_2833200] => Array
[0] => bobby
[1] => 29 Jan 2007 - 10:54
[2] => 212-879-6786
[retail_2833231] => Array
[0] => john
[1] => 29 Jan 2007 - 11:04
[2] => 718-768-7685
etc......
Now I want to be able to sort the array, by any key (i.e. by
name, date, or phone number).
I have done that before, but I'm sure my method is not the
best method to do that.
Here's how I do it:
foreach($orders as $order){ // I append the name value to the
array keys (and insert a separator #)
$sort_by_name[] = $order[0].'#'.$order;
natcasesort($sort_by_name); // I sort the resulting new array
(hence sorting them by name)
foreach($sort_by_name as $sort){ // I remove the appended
names, to get back to original values
$final_array[] = preg_replace('/.*?#/','',$sort);
now I have a new array called $final_array, sorted by names.
I'm sure there is a better way to do this!!!!
seb ( [email protected])
http://webtrans1.com | high-end web
design
Downloads: Slide Show, Directory Browser, Mailing List

Michael Fesser wrote:
> .oO((_seb_))
>
>> Say I have a large array, called $orders, looking
like this:
>> [...]
>>
>> Now I want to be able to sort the array, by any key
(i.e. by name, date, or phone number).
>
> Use your own comparison function, given as a callback to
uasort().
>
>
http://www.php.net/uasort
>
> To be flexible you could use a global variable (or a
class member if
> you'd do it in OOP), so the comparison function knows
which key you want
> to use for sorting, e.g.
>
> $col = 2;
> $asc = 1; // -1 for descending order
>
> function cmpOrders($a, $b) {
> global $col, $asc;
> return strnatcasecmp($a[$col], $b[$col])*$asc;
> }
>
> uasort($orders, 'cmpOrders');
>
> This would sort by phone numbers, with $col = 0 it would
sort by name.
> It could also be extended to use numeric comparison
instead of string
> comparison when necessary.
>
> The only problem so far are the dates. It would really
help if they
> would be stored as "YYYY-MM-DD hh:mm" or at least as
Unix timestamps.
> The format they are currently stored in can't be used
for sorting.
>
> Micha
perfect, this works, thanks a lot Micha. I did stumble upon
uasort, looking in php.net manual but
did not understand how to use it...
Yeah I'll have to reformat the date, no problem.
seb ( [email protected])
http://webtrans1.com | high-end web
design
Downloads: Slide Show, Directory Browser, Mailing List

Similar Messages

  • Sorting array vs sorting paginated array

    ...pulling in a long list of photos in a gallery, and I have
    a sort function working within the pages of data fine. I need to
    bring it back out of the paging stuff so that it sorts the data,
    THEN passes to the paging function.
    My data comes from mysql > php > xml > Flex into an
    ArrayCollection, referred to in MXML as {acSlides}.
    Pass the array collection to the paging system like:
    <utils:FXCPager id="fxcPager" pageIndex="{currentPage}"
    pageSize="{pageSize}" dataProvider="{acSlides}" />
    then assign in repeater:
    <mx:Repeater id="slideRepeater"
    dataProvider="{fxcPager.pageData}">...</>
    There is a button for sorting that calls a function a la:
    private function sortByRating():void {
    var sort:Sort = new Sort();
    sort.fields = [new SortField("rating",false,true)];
    fxcPager.pageData.sort = sort;
    toggleRating = false;
    fxcPager.pageData.refresh();
    What do I need to do to get this sort function to work on the
    {acSlides} array collection instead of {fxcPager.pageData} ???
    Thanks!

    OK I have resolved the error by importing the class adGroup. However now I am back to the original problem which is how to sort the DisplayName alphabetically and keep the associated link in tact. I created the class to avoid sorting parellel arrays but I am afraid it solved nothing as I have no idea how to sort the class. I tried just sorting it like an array:
      Arrays.sort(bAD.getGroups()but receive the following error:
    java.lang.ClassCastException: com.mylbean.adGroup incompatible with java.lang.Comparable
    at java.util.Arrays.mergeSort(Arrays.java:1160)
    at java.util.Arrays.sort(Arrays.java:1131)
    >
    I would assume this message is caused because I cannot sort a class array using this method. But being newer to Java I really have no idea how to get the class to sort by DisplayName before displaying to the user.
    So at this point the code works fine but how do I display alphabetically? All suggestions are appreciated.

  • Removes duplicates from a sorted array without having to create a new array

    Funcation removes duplicates from a sorted array without having to create a new array

    Funcation removes duplicates from a sorted array
    without having to create a new arrayIs a 'funcation' like a vacation but more fun or
    something?LMFAO. You just jumped with both feet on one of my biggest peeves. I've been outed!
    Actual words/phrases I've seen used which I hate with every fiber of my being:
    "Mrs. Freshly's"
    "McFlurry"
    "Freshissimo"
    "Spee-dee"
    "Moons Over My Hammy"
    One of my favorite SNL skits had Will Ferrell leading a panel of movie reviewers (they're the worst for this kind of junk). Each one had some cheesy pun to describe their respective movie. Ferrell topped the show off with his endorsement of "Fantasia 2000 is Fantasgreat!"
    LOL.
    "Come to Slippy Village - it's a FUNCATION!"
    &#167; (runs off, laughing maniacally, head explodes)

  • Exception handling in sorting arrays

    Hi all, I have a problem with the use of the built in java sort fo arrays. My program works on an array with 4 or 5 entities. When I run it in some folders it works but not in others. I get the following error after compilation, where "ResultData" is the class of array to be sorted:Exception in thread "main" java.lang.NullPointerException
    at ResultData.compareTo(TextEdit.java:1215)
    at java.util.Arrays.mergeSort(Arrays.java:1064)
    at java.util.Arrays.mergeSort(Arrays.java:1071)
    at java.util.Arrays.mergeSort(Arrays.java:1072)
    at java.util.Arrays.mergeSort(Arrays.java:1071)
    at java.util.Arrays.mergeSort(Arrays.java:1071)
    at java.util.Arrays.mergeSort(Arrays.java:1071)
    at java.util.Arrays.sort(Arrays.java:1014)
    at java.util.Collections.sort(Collections.java:78)
    [\code]Can any one give a suggestion?                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

    Here is the code for the class "ResultData"class ResultData implements Comparable
         String file1;
         String file2;
         double var, var1, var2;
         public ResultData(String f1,String f2,double v, double x, double y)
                   file1= f1; file2=f2;
                   var=v; var1=x; var2=y;
         public String getFile1Name()
              return file1;
         public String getFile2Name()
              return file2;
         public double getVar()
              return var;
         public double getVar1()
              return var1;
         public double getVar2()
              return var2;
         public String toString()
              return file1+"          "+file2+"          "+var+"          "+var1+"          "+var2;
           public int compareTo(Object o)
              ResultData r= (ResultData)o;
              double result = this.getVar()- r.getVar();
              if (result < 0.0)         return -1;
              else if(result > 0.0)     return 1;
              else return 0;
    } // ends class ResultData

  • TreeSet vs Collection.Sort / Array.sort for Strings

    Gurus
    I am pondering weather to use TreeSet vs the Collections.sort / Array.sort for sorting Strings.
    Basically I have a list of Strings, i need to perform the following operations on these Strings
    1) Able to list Strings starting with a Prefix
    2) Able to list Strings Lexically greater than a String
    Any help would be greatly appreciated!
    Thanks a bunch

    SpaceShuttle wrote:
    Gurus
    I am pondering weather to use TreeSet vs the Collections.sort / Array.sort for sorting Strings.
    Basically I have a list of Strings, i need to perform the following operations on these Strings
    1) Able to list Strings starting with a Prefix
    2) Able to list Strings Lexically greater than a String
    Any help would be greatly appreciated!
    Thanks a bunchBig-O wise, there's no difference between sorting a list of N elements or inserting them one by one in a tree-set. Both take O(n*log(n)). But both collections are not well suited for looking up string that start with a certain substring. In that case you had better use a Patricia tree (or Radix tree).
    Good luck.

  • How to sort on MULTIPLE Keys which are elements of VO's stored in  list

    How to sort on MULTIPLE Keys which are elements of VO's stored in a list.. without disturbing the ordering done by previous sorting...?
    Is there any best soln for the same...
    Thanks..

    How to sort on MULTIPLE Keys which are elements of
    VO's stored in a list.. without disturbing the
    ordering done by previous sorting...?Do you mean you want to do a heirarchical sort? Where the secondary key is only used when the primary keys are equal etc.? That's pretty trivial. If the primary keys are equal, check the secondary key. How do you sort words in alphabetical order? It's the same process.

  • Sun C++ std::sort coredump during sorting array of long values

    Hello,
    I got core dump during execution following test program on both Solaris 9 (compile by CC: Sun C++ 5.5 Patch 113817-19 2006/10/13) and Solaris 10 platforms (compile by CC: Sun C++ 5.9 SunOS_sparc Patch 124863-01 2007/07/25).
    Core is dumped during sorting array of about 120k elements of unsigned long types using STL std:sort. The input data is available at link: [file.txt|http://www.savefile.com/files/1924004]
    When I change sorting methods to std::stable_sort program works fine.
    The funny thing is that when I change order of last two values of input data (swap), sorting is successful with std::sort.
    Can anyone tell me if it is Sun C++ compiler bug ?Can I use std::stable_sort method safely?
    Below code:
    #include <iostream.h>
    #include <fstream.h>
    #include <set>
    #include <string>
    int main( int argc, char** argv )
      char readStr[256];
      ifstream file;
      unsigned long *l;
      int i=0;
      l = new unsigned long[119016];
      if (l ==0)
        cout << "Error in allocate memory";
        return -1;
      file.open("file.txt");
      if (!file)
        cout << "Error in openening file";
        return -1;
      while(file.getline(readStr, 256,'\n'))
        cout << readStr<<endl;
        l= atol(readStr);
    cout << l[i]<<endl;
    i++;
    std::sort(l,l+119016); //core dump here!!!
    for (i=0;i<119016;i++)
    cout <<l[i]<<endl;
    file.close();
    delete [] l;
    return( 0 );
    Greetings
    Robert                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

    You have run into bug 6588033 "std::sort from libCstd loops", which is fixed in current patches.
    Get the current patches for Sun Studio and also the current patch for the C++ runtime libraries (SUNWlibC patch).
    You can find them here:
    [http://developers.sun.com/sunstudio/downloads/patches/index.jsp]
    Sun C++ 5.5 probably does not have the fix, since it is quite old and falling out of support.
    C++ 5.9 does have the fix.

  • I need sorting VI that returns the sorted array element's positions in the unsorted array

    I need a VI that will very quickly (n log n) sort a 1D array of doubles.  This VI should not only output the sorted array, but for each of the sorted array elements, it should also output that sorted array element's position in the unsorted array.  So for example if the input array were:
    unsorted_array
    4.1
    2.3
    7.0
    5.6
    10.2
    Then the output arrays would be:
    sorted_array
    2.3
    4.1
    5.6
    7.0
    10.2
    indices_array
    1 (the value 2.3 is located at position 1 in the unsorted_array)
    0 (the value 4.1 is located at position 0 in the unsorted_array)
    3 (the value 5.6 is located at position 3 in the unsorted_array)
    2 (the value 7.0 is located at position 2 in the unsorted_array)
    4 (the value 10.2 is located at position 4 in the unsorted_array)
    This way I could generate the sorted_array using just the indices_array and the unsorted_array.  Has anyone written a nifty piece of code to do this?  I did some research on (n log n) sorting algorithms but most of them use recursion which I don't know how to do in LabVIEW.  It would also be nice to have an algorithm like this that could sort an array of strings.
    cheers,
    Richard

    Try something like the attached example (LabVIEW 7.0). I think it does what you need.
    (To understand the code, it is important to know that arrays of clusters are sorted by the first element in the cluster).
    Sort array itself sorts also array of strings, so you could just substitute, keeping the rest of the code the same.
    Sort array uses a variation of quicksort, so it should have about NlogN complexity.
    (If you think you only need the array of indices to later generate the sorted array, it does not make much sense to even do it. To get the indices, you need to sort the array anyway. You should just sort the plain array directly.
    Message Edited by altenbach on 07-13-2005 03:47 PM
    LabVIEW Champion . Do more with less code and in less time .
    Attachments:
    SortAndIndex.vi ‏26 KB

  • Bank detials Maintained in Vendor master data with out Sort code / Bank Key

    Hi
    We have a Requirement of creating Japanese bank details in Vendor Master Record. But No Bank key / sort code is available.
    Even for Russian Bank accounts we donu2019t have any bank key / sort code available from client.
    System does not allow to create vendor bank details with out providing Sort code/ Bank key details.
    Is there is any way of creating bank details in Vendor master data with out giving Bank key details.
    Regards,
    Karunakar.

    Hi,
    I assume you fill in Sort Code in bank number field.
    In my company, our bank number is set not to duplicate bank key.
    So bank key is simply a reference.  And our bank number field is not mandatory.
    If you follow these settings, you can create an abitrary bank key for your vendor bank account.

  • Sorting array

    I know how to sort the array of strings alpha numerically but my problem is that the numerical values will not follow there corresponding strings
    here is the code i am using:
    Harold Timmis
    [email protected]
    Orlando,Fl
    *Kudos always welcome
    Solved!
    Go to Solution.
    Attachments:
    testingfileIO.vi ‏35 KB

    Hi.
    It's nice to have "sorting array" icon.
    But I have problem with programming similar option. I want to sort my sine samples taken in more periods to just one period.
    Beside defining that mycurrent sample should be less than next one, and greater from previous one in one case, I should take in consider that derivation could be positive or negative. While negative derivation, next sample should be less then current and so one.
    Can someone help me with programming?
    I've extracted the first period, and then I have to go trough each sample and compare him. When logic is well,I get the index and putinsert elemt in array.
    I think that I'm having problem with while loops. I don't know where to put them.
    I'm attaching VI. beacuse I'm working on Labview 9.0, I'm attaching also a pic.
    Thanks in advance.
    Attachments:
    resampling.vi ‏89 KB
    Untitled.jpg ‏135 KB

  • Sorting array list

    can u please give me the source code for:
    sorting array list for ascending and descending order

    You already have the source code.

  • CompareTo and Sorting Arrays

    I am trying to sort an array of telephone directory information by last, first names, but am having trouble understanding how to use the compareTo method to do so. I thought I could use Arrays.sort, but this doesn't seem to work....any help would be appreciated.
    public static Person [] sort(Person [] people) {
    Person [] sorted = Arrays.sort(people);
    return (Person[])sorted.toArray(new Person[sorted.size()]);
    }/* end sort method */
    //From Person class
    public int compareTo(Object o) {
    Person p = (Person)o;
    int temp;
    if((temp=getLastName().compareTo(p.getLastName())) == 0)
    if((temp=getFirstName().compareTo(p.getFirstName())) == 0)
    //not sure what to do here
    return temp;
    }

    You want to return a negative or positive or zero integer if this item is less than, greater than, or the same as, the object passed as an argument, right? (Read the API.)
    You're trying to sort by last name first, and if they're the same, then the first name, right?
    So you're not really checking for zero, you're checking for non-zero.
    I'm assuming that first name and last name are given by strings, which implements Comparable. So you can do:
    public int compareTo(Object o) {
      Person p = (Person)o;
      int temp = getLastName().compareTo(p.getLastName());
      if (temp != 0)
        return temp;
      // implicit else here
      // MORE CODE GOES HERE
    }I'll let you do the "MORE CODE GOES HERE" as an exercise.
    BTW if you're implementing Comparable, you should probably be overriding equals() as well.

  • Index of sorted array

    I have a unsorted array as follows:
    array_index = {0 1 2 3 4 5 6 7 8}
    array = {1 2 4 3 4 3 4 2 1}
    I would like to get the previous index of sorted array as follows:
    old_index = {2 4 6 3 5 1 7 0 8}
    arrray.sort doesn't return the index the previous index, please help me.

    You can do that using by creating an array containing the numbers 0 to n in increasing order and sorting that using a comparator that actually compares the content of the original array at the indices provided to it instead of the values themselves.
    But why would you need that? Could you describe your requirement in a broader scope?

  • Sorting Arrays in a Vector by a String field in the array

    Hi
    i have a Vector where i put Arrays in. These Arrays are all of the same type. The first field is kind of an indetifier, the type is String. That's the key field i'd like to sort the vector elements in an alphabetical order.
    I know there is that Collator methode to sort Vectors. That's no problem for me to do if i just have Strings in the Vector. But with this contruct of Arrays that need do be sortet for one fiel of the array, i have no idea whether this might be done with that Collator methode too.
    So, before i start written some kind of bubble sort methode (that sure would solve the problem, but probably not very smart and fast...) I'd like to ask you, whether you have an idea how to solve that problem with Collator or even with some other methode?
    thanks for your help!

    Comparable and Arrays.sort. Read the APIs, or look at the two or three examples I've done so far today in this forum. Or search the forum for +Comparable Arrays sort
    Answer provided by Friends of the Water Cooler. Please inform forum admin via the
    'Discuss the JDC Web Site' forum that off-topic threads should be supported.

  • PHP create array/variable for two dropdowns and insert into one column

    Hello,
    I have been trying for days to get this to work. Any help would be very appreciated.
    The dropdown code:
    <?php //Dropdowns for hours and minutes
    $hour = array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
    $min = array (.00, .25, .50 ,.75);
    echo '<span class="red">Hours :</span><select name="hour">';
    foreach ($hour as $value1) {
    echo "<option value=\"$value1\">$value1</option>\n";
    echo '</select>';
    echo '<span class="red">Quarter Hours :</span><select name="min"';
    foreach ($min as $value2) {
    echo "<option value=\"$value2\">$value2</option>\n";
    echo '</select>';
    //Dropdowns for hours and minutes
    //Create variable to send to the time field using a hidden field
    function input_time($value1, $value2) {
    $time = count($value1 + $value2);
    return $input_time;
    ?>
    <input name="time" type="hidden" value="<?php echo "$input_time";?>" />
    The Schema:
    CREATE TABLE `ND_time_sheet` (
      `time_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `day` varchar(10) NOT NULL DEFAULT '',
      `date` varchar(8) NOT NULL DEFAULT '',
      `project_id` varchar(8) DEFAULT NULL,
      `non_bill` tinytext,
      `staff_id` varchar(5) NOT NULL DEFAULT '',
      `time` decimal(3,2) unsigned zerofill DEFAULT NULL,
      `type` varchar(30) NOT NULL DEFAULT '',
      PRIMARY KEY (`time_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1
    Thanks!

    9677670421 wrote:
    hi... i am trying to do the same but i am having the 2D array of data when first time if i clicked in table it should show the the first row values and if i again clicked same value should show in the second row and so on... but insted in my code if clicked (using insert into array ) at a time it is showing two rows of the data pl help me ..........
    This seems to be a different problem, so you should have started a new thread instead.
    Can you show us your code, tell us what you are clicking, tell us what you get and what you expect to get instead. Thanks.
    LabVIEW Champion . Do more with less code and in less time .

Maybe you are looking for

  • Call a Form with its name instead of its number

    instead of using : http://servername:7777/pls/portal30/PORTAL30.wwa_app_module.new_instance?p_moduleid=1556977996 I'd like not to use ModuleID but module name instead. Is it possible?

  • Cannot publish: solution found

    Hi all. I'm an iWeb/.mac newbie with a trial .Mac account testing whether or not to keep the .mac. I first fired up iWeb a few weeks ago, then didn't have time to mess with it. Recently, from lack of time to do a photo gallery myself via emacs, and t

  • Problem exporting from large sequences

    I'm reposting here becase it could be hardware related (the system is new), and because it wasn't answered on the CS5 forum and quickly got buried beneath 100 other threads.  There's usually more in-depth support on this forum.  Here goes: I'm runnin

  • Upgrade some modules

    HI we need to upgrade just some module of EBS, we would like to know the patches to perform this task. follow is the module we need to upgrade from 12.0.4 to 12.0.6 : AP / AR / GL / CASH / IE / IPROC / INV / PO Regards

  • Parallel_automatic_tuning increase processes

    In my 8174 db (enterprise ed) on aix 51 with 4 cpu, i see processes parameter value equal to 192. But in my init , i set it to 20. I changed the value to 30 but show parameter/select from v$parameter it's always 192. It's the case since i set paralle