Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 美元。每个不';不尊重数组的顺序_Javascript_Php_Jquery_Arrays - Fatal编程技术网

Javascript 美元。每个不';不尊重数组的顺序

Javascript 美元。每个不';不尊重数组的顺序,javascript,php,jquery,arrays,Javascript,Php,Jquery,Arrays,我试图在PHP中排序一个多维数组,然后将其传递到我的javascript文件以显示它。我使用函数$.map和$来显示数据。问题是JS根据id对数组重新排序。例如,如果我有这样一个数组 $array = array(1 => array('name' => 'A','last' => 'B'), 5 => array('name' => 'C','last' => 'D'), 2 => arra

我试图在PHP中排序一个多维数组,然后将其传递到我的javascript文件以显示它。我使用函数
$.map
$来显示数据。问题是JS根据id对数组重新排序。例如,如果我有这样一个数组

$array = array(1 => array('name' => 'A','last' => 'B'), 
               5 => array('name' => 'C','last' => 'D'),
               2 => array('name' => 'K','last' => 'Z'));
Javascript将以这种方式进行排序

    array = {1:{name:'A',last:'B'},2:{name:'C',last:'D'},5:{name:'K',last:'Z'}}
我正在使用uasort根据名称对数组进行排序:

public function specialNameComparison($firstElmnt,$secondElmnt){
    if ($firstElmnt['name'] == $secondElmnt['name']) {
        return 0;
    }
    return ($firstElmnt['name'] < $secondElmnt['name']) ? -1 : 1;
}

uasort($users,array($this,'specialNameComparison'));
echo json_encode($users);
die();

为什么Javascript会这样做

正如上面的评论者所指出的,您正在创建一个对象,而不是JS中的数组。没有关联数组,表示索引将您置于“类似数组的对象”的上下文中。如果您需要这些钥匙,我建议您:

$array = [
  [ 'key' => 1, 'name' => 'A','last' => 'B' ], 
  [ 'key' => 5, 'name' => 'C','last' => 'D' ],
  [ 'key' => 2, 'name' => 'K','last' => 'Z' ],
];
当json编码时,将输出:

[
  { "key": 1, "name": "A","last": "B" }, 
  { "key": 5, "name": "C","last": "D" },
  { "key": 2, "name": "K","last": "Z" },
]
那么您的js可以是:

const arr=[
{key:1,name'A',last'B'},
{key:5,name'C',last'D'},
{key:2,name'K',last'Z'},
];

arr.forEach(({key,name,last})=>console.log(`key:${key}-${name}${last}`))
正如上面的评论员所指出的,您正在创建一个对象,而不是JS中的数组。没有关联数组,表示索引将您置于“类似数组的对象”的上下文中。如果您需要这些钥匙,我建议您:

$array = [
  [ 'key' => 1, 'name' => 'A','last' => 'B' ], 
  [ 'key' => 5, 'name' => 'C','last' => 'D' ],
  [ 'key' => 2, 'name' => 'K','last' => 'Z' ],
];
当json编码时,将输出:

[
  { "key": 1, "name": "A","last": "B" }, 
  { "key": 5, "name": "C","last": "D" },
  { "key": 2, "name": "K","last": "Z" },
]
那么您的js可以是:

const arr=[
{key:1,name'A',last'B'},
{key:5,name'C',last'D'},
{key:2,name'K',last'Z'},
];

arr.forEach(({key,name,last})=>console.log(`key:${key}-${name}${last}`))
您没有数组。这是一个对象,如果它有{和}来扩展epscarello所说的,你拥有的是一个对象,而不是数组。无法保证对象上键的顺序。相关:PHP关联数组成为javascript中的对象。Javascript本机没有关联数组的概念。将其转换为真实数组,然后保证顺序。您没有数组。这是一个对象,如果它有{和}来扩展epscarello所说的,你拥有的是一个对象,而不是数组。无法保证对象上键的顺序。相关:PHP关联数组成为javascript中的对象。Javascript本机没有关联数组的概念。将其转换为真实数组,然后保证顺序。