array(2) {
[0]=>
object(stdClass)#144 (2) {
["id"]=>
string(1) "2"
["name"]=>
string(5) "name1"
}
[1]=>
object(stdClass)#145 (2) {
["id"]=>
string(1) "4"
["name"]=>
string(5) "name2"
}
}
我想将键和值(例如[distance] = 100;)添加到数组中的对象。在此之后我想对距离值进行排序。我怎样才能做到这一点?
答案 0 :(得分:1)
要获得像你这样的结构,你可以这样做:
$arr = array();
$arr[0]->id = "2";
$arr[0]->name = "name1";
$arr[1]->id = "4";
$arr[1]->name = "name2";
要添加“距离”,您可以执行以下操作:
$arr[0]->distance = 100;
$arr[1]->distance = 200;
要排序,您可以使用decorate / sort / undecorate模式:
$arr = array_map(create_function('$o', 'return array($o->distance, $o);'), $arr); // transform array of objects into array of arrays consisted of sort key and object
sort($arr); // sort array of arrays
$arr = array_map('end', $arr); // take only last element from each array
或者你可以使用usort()和这样的自定义比较函数:
function compareDistanceFields($a, $b) {
return $a->distance - $b->distance;
}
usort($arr, "compareDistanceFields");
答案 1 :(得分:0)
$my_array[0]->distance = 100;
$my_array[0]->distance = 101;
usort($my_array, "cmp");
function cmp($a, $b)
{
if ($a->distance == $b->distance)
return 0;
return ($a->distance > $b->distance) ? 1: -1;
}
答案 2 :(得分:-1)
你在这里有一系列哈希;也就是说,数组的每个元素都是一个哈希(一个包含元素的结构,每个元素都由一个键标识)。
为了添加键和值,您只需分配它,如下所示:
$array[0]["distance"]=100;
$array[1]["distance"]=300;
#and so on
PHP哈希和数组通常记录在案here。
现在,为了对数组进行排序(每个元素都是一个哈希),你需要使用“uasort”函数,它允许你定义一个比较函数;在此比较功能中,您可以定义所需的行为,即对距离键的值进行排序。
这样的事情:
// Comparison function, this compares the value of the "distance" key
// for each of the two elements being compared.
function cmp($a, $b) {
if ($a["distance"] == $b["distance"]) {
return 0;
}
return ($a["distance"] < $b["distance"]) ? -1 : 1;
}
一旦定义了这个,你就像这样调用uasort:
uasort($array, 'cmp');
查找有关uasort here的更多文档。