在PHP中操作多维数组?

时间:2010-06-29 22:05:43

标签: php

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;)添加到数组中的对象。在此之后我想对距离值进行排序。我怎样才能做到这一点?

3 个答案:

答案 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的更多文档。