我正在尝试对不规则的php数组进行排序。这是不规则的,因为结构不同于普通的php数组。我通常能够使用usort对数组进行排序,但是这个php数组的结构使得很难使用。这是数组的基本结构:
Array
(
[id] => Array
(
[0] => 3220604
[1] => 5341522
[2] => 1234568144
[3] => 11
)
[firstname] => Array
(
[0] => Sam
[1] => Donald
[2] => Keesh
[3] => Eat
)
[lastname] => Array
(
[0] => Fisher
[1] => Duck
[2] => Smelley
[3] => Me
)
)
我正在尝试按ID排序,但当然,如果我使用usort,它会尝试按最高阶数组排序,例如id,first和last。我如何用这种结构对数组进行排序?
答案 0 :(得分:2)
呃。
怎么样: ((11,'Sam','Fisher'),(2352335,'Name','Last'),...)
这样,ID与其他信息位相关联。目前,不同阵列之间没有实际关系,除了你头脑中的任何东西。它们不像表格的行/列。
答案 1 :(得分:2)
您可以使用array_multisort
执行此操作:
$arr = array(
'id' => array(3220604, 5341522, 1234568144, 11),
'firstname' => array('Sam', 'Donald', 'Keesh', 'Eat'),
'lastname' => array('Fisher', 'Duck', 'Smelley', 'Me')
);
array_multisort($arr['id'], $arr['firstname'], $arr['lastname']);
var_dump($arr);
这里array_multisort
对第一个数组的值进行排序,并相应地对其他数组的值进行排序。
但使用不同的数据结构也是可取的。
答案 2 :(得分:1)
您应该将数组重组为:
array(array('id' => 1, 'first_name' => 'David', 'last_name' => 'Smith'))
这将使您的生活更轻松。从这里查看函数http://www.whypad.com/posts/php-sort-multi-dimensional-array/848/:
function sortMultiArray(&$array, $key) {
foreach($array as &$value) {
$value['__________'] = $value[$key];
}
/* Note, if your functions are inside of a class, use:
usort($array, array("My_Class", 'sort_by_dummy_key'));
*/
usort($array, 'sort_by_dummy_key');
foreach($array as &$value) { // removes the dummy key from your array
unset($value['__________']);
}
return $array;
}
function sort_by_dummy_key($a, $b) {
if($a['__________'] == $b['__________']) return 0;
if($a['__________'] < $b['__________']) return -1;
return 1;
}
答案 3 :(得分:0)
答案 4 :(得分:0)
如果您只想按ID排序,则可以
asort($aryName['id']);
这将对ID进行排序,但保持其密钥正确以引用人员姓名。
你可以用同样的方式对其他子阵列进行排序
asort($aryName['id']);
asort($aryName['firstname']);
asort($aryName['lastname']);
答案 5 :(得分:0)
你能改变阵列的结构吗?现在概述的方式是糟糕的设计。
类似的东西:
array
(
0 => array(
'id' => 3220604,
'firstname' => 'Sam',
'lastname' => 'Fisher'
),
1 => array(
'id' => 5341522,
'firstname' => 'Donald',
'lastname' => 'Duck'
),
);
然后你可以使用usort函数(如上所述)进行排序。更重要的是,您的数据将以更合理,更易于处理的方式存储。
答案 6 :(得分:0)
可能正在构建像
这样的数组$allInOneArray= array (
"id1" => array("firstname" => "Peter", "lastname" => "Paul"),
"id2" => array("firstname" => "Mary", "lastname" => "May")
//etc
);
将使排序更容易。
答案 7 :(得分:0)
在经典的usort()解决方案之前和之后使用此函数
function transpose($M){
foreach ($M as $row=>$cols) foreach ($cols as $col=>$value) $Mt[$col][$row]=$value;
return ($Mt);
}