我想用{a,b,c,d}创建对象并拥有这些对象的数组:
[{1,1,3,5},{3,1,7,7},{3,5,7,1}]
a b c和d的值是以lopp
生成的如何创建该对象?我怎样才能在数组中添加对象?
答案 0 :(得分:2)
无法像在JavaScript或其他语言中那样在PHP中编写对象文字。
在PHP中执行此操作的最简单方法是使用type casting
// associative array
$arr = ["a" => 1, "b" => 2, "c" => 3, "d" => 4];
// cast as object
$obj = (object) $arr;
// Or you could do it all in one line
$obj = (object) ["a" => 1, "b" => 2, "c" => 3, "d" => 4];
检查出来
echo $obj->a; // 1
echo $obj->b; // 2
echo $obj->c; // 3
echo $obj->d; // 4
echo json_encode($obj); // {"a":1,"b":2,"c":3,"d":4}
您的循环可能看起来像这样
$objects = [];
for ($i=0; $i<4; $i++) {
// i'll just makeup some values for a,b,c,d here since i don't know
// how you are assigning them
$objects[] = (object) [
"a" => $i,
"b" => $i * 2,
"c" => $i * $i,
"d" => rand()
];
}
print_r($objects);
输出
Array
(
[0] => stdClass Object
(
[a] => 0
[b] => 0
[c] => 0
[d] => 102971157
)
[1] => stdClass Object
(
[a] => 1
[b] => 2
[c] => 1
[d] => 167903564
)
[2] => stdClass Object
(
[a] => 2
[b] => 4
[c] => 4
[d] => 1894248447
)
[3] => stdClass Object
(
[a] => 3
[b] => 6
[c] => 9
[d] => 929037839
)
)
和JSON输出
[
{"a":0,"b":0,"c":0,"d":102971157},
{"a":1,"b":2,"c":1,"d":167903564},
{"a":2,"b":4,"c":4,"d":1894248447},
{"a":3,"b":6,"c":9,"d":929037839}
]
修改
我如何按属性b命令我的数组?
首先创建两个可重复使用的比较器
function ascendingComparator($a, $b) {
if ($a > $b) return 1;
else if ($a < $b) return -1;
else return 0;
}
function descendingComparator($a, $b) {
return -1 * ascendingComparator($a, $b);
}
然后使用usort将b
属性传递给比较器
// sort ascending; lowest b value will be first in the array
usort($objects, function($x, $y) {
return ascendingComparator($x->b, $y->b);
});
echo json_encode($objects);
// OR sort descending; highest b value will be first in the array
usort($objects, function($x, $y) {
return descendingComparator($x->b, $y->b);
});
echo json_encode($objects);