PHP头条
热点:

js下模仿php中ksort键值对排序,


function ksort(inputArr, sort_flags) 
            {
                //  discuss at: http://phpjs.org/functions/ksort/
                // original by: GeekFG (http://geekfg.blogspot.com)
                // improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
                // improved by: Brett Zamir (http://brett-zamir.me)
                //        note: The examples are correct, this is a new way
                //        note: This function deviates from PHP in returning a copy of the array instead
                //        note: of acting by reference and returning true; this was necessary because
                //        note: IE does not allow deleting and re-adding of properties without caching
                //        note: of property position; you can set the ini of "phpjs.strictForIn" to true to
                //        note: get the PHP behavior, but use this only if you are in an environment
                //        note: such as Firefox extensions where for-in iteration order is fixed and true
                //        note: property deletion is supported. Note that we intend to implement the PHP
                //        note: behavior by default if IE ever does allow it; only gives shallow copy since
                //        note: is by reference in PHP anyways
                //        note: Since JS objects' keys are always strings, and (the
                //        note: default) SORT_REGULAR flag distinguishes by key type,
                //        note: if the content is a numeric string, we treat the
                //        note: "original type" as numeric.
                //  depends on: i18n_loc_get_default
                //  depends on: strnatcmp
                //   example 1: data = {d: 'lemon', a: 'orange', b: 'banana', c: 'apple'};
                //   example 1: data = ksort(data);
                //   example 1: $result = data
                //   returns 1: {a: 'orange', b: 'banana', c: 'apple', d: 'lemon'}
                //   example 2: ini_set('phpjs.strictForIn', true);
                //   example 2: data = {2: 'van', 3: 'Zonneveld', 1: 'Kevin'};
                //   example 2: ksort(data);
                //   example 2: $result = data
                //   returns 2: {1: 'Kevin', 2: 'van', 3: 'Zonneveld'}
            
                var tmp_arr = {},
                    keys = [],
                    sorter, i, k, that = this,
                    strictForIn = false,
                    populateArr = {};
            
                switch(sort_flags) {
                    case 'SORT_STRING':
                        // compare items as strings
                        sorter = function(a, b) {
                            return that.strnatcmp(a, b);
                        };
                        break;
                    case 'SORT_LOCALE_STRING':
                        // compare items as strings, original by the current locale (set with  i18n_loc_set_default() as of PHP6)
                        var loc = this.i18n_loc_get_default();
                        sorter = this.php_js.i18nLocales[loc].sorting;
                        break;
                    case 'SORT_NUMERIC':
                        // compare items numerically
                        sorter = function(a, b) {
                            return((a + 0) - (b + 0));
                        };
                        break;
                        // case 'SORT_REGULAR': // compare items normally (don't change types)
                    default:
                        sorter = function(a, b) {
                            var aFloat = parseFloat(a),
                                bFloat = parseFloat(b),
                                aNumeric = aFloat + '' === a,
                                bNumeric = bFloat + '' === b;
                            if(aNumeric && bNumeric) {
                                return aFloat > bFloat ? 1 : aFloat < bFloat ? -1 : 0;
                            } else if(aNumeric && !bNumeric) {
                                return 1;
                            } else if(!aNumeric && bNumeric) {
                                return -1;
                            }
                            return a > b ? 1 : a < b ? -1 : 0;
                        };
                        break;
                }
            
                // Make a list of key names
                for(k in inputArr) {
                    if(inputArr.hasOwnProperty(k)) {
                        keys.push(k);
                    }
                }
                keys.sort(sorter);
            
                // BEGIN REDUNDANT
                this.php_js = this.php_js || {};
                this.php_js.ini = this.php_js.ini || {};
                // END REDUNDANT
                strictForIn = this.php_js.ini['phpjs.strictForIn'] && this.php_js.ini['phpjs.strictForIn'].local_value && this.php_js
                    .ini['phpjs.strictForIn'].local_value !== 'off';
                populateArr = strictForIn ? inputArr : populateArr;
            
                // Rebuild array with sorted key names
                for(i = 0; i < keys.length; i++) {
                    k = keys[i];
                    tmp_arr[k] = inputArr[k];
                    if(strictForIn) {
                        delete inputArr[k];
                    }
                }
                for(i in tmp_arr) {
                    if(tmp_arr.hasOwnProperty(i)) {
                        populateArr[i] = tmp_arr[i];
                    }
                }

                return strictForIn || populateArr;
            }

www.phpzy.comtrue/php/22647.htmlTechArticlejs下模仿php中ksort键值对排序, function ksort(inputArr, sort_flags)              {                 //  discuss at: http://phpjs.org/functions/ksort/                 // original by: GeekFG (http:/...

相关文章

    暂无相关文章

PHP之友评论

今天推荐