简体   繁体   中英

php - sorting array (loading values from database) from shortest to longest

I have next code:

<select>
    <?php foreach ($values as $info) { ?>
      <option value="<?php echo $info['id'] ?>" <?php echo $value == $info['id'] ? 'selected="selected"' : '' ?>><?php echo $info['text'] ?></option>
    <?php } ?>
  </select>

i loading values from database! And have next results:

    <option value="1">Jacksonville (Florida)</option> 
    <option value="2">Florida reg.</option> 
    <option value="3">Florentia</option> 
    <option value="9999">Florida</option> 
    <option value="5">Miami (Florida)</option> 

how to do: on the top were the shortest results for 'text':

Florida
Florentia
Florida reg.
Miami (Florida)
Jacksonville (Florida)

        <option value="9999">Florida</option> 
        <option value="3">Florentia</option>
        <option value="2">Florida reg.</option> 
        <option value="5">Miami (Florida)</option> 
        <option value="1">Jacksonville (Florida)</option> 

Thanks

You can use usort , as answered here in another question .

function sort($a,$b){
    return strlen($b)-strlen($a);
}

usort($array,'sort');

I am going to assume that you are using mysql(i) or similar to populate the $values , so if this is the case, you can do it at the database level by using a query similar to;

SELECT name
FROM testing_table 
ORDER BY LENGTH(name)

To see this in action, you can create a database table like this;

CREATE TABLE `testing_table` (
  `id` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `name` varchar(255) NOT NULL
) COMMENT='' ENGINE='InnoDB';

With some test data;

INSERT INTO testing_table (name) VALUES ('eeeee'),('bb'),('ccc'),('a'),('dddd');

A link to see it all in action: http://sqlfiddle.com/#!9/558f9/2

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM