【问题标题】:How to create an array of objects in PHP dynamically如何在 PHP 中动态创建对象数组
【发布时间】:2016-06-21 20:30:59
【问题描述】:

我想用 {a,b,c,d} 创建对象并拥有一个包含这些对象的数组:

[{1,1,3,5},{3,1,7,7},{3,5,7,1}]

值 a b c 和 d 在 lopp 中生成

如何创建该对象?以及如何将这些对象添加到我的数组中?

【问题讨论】:

  • 函数 json_encode
  • 听起来像 json_encode 和 json_decode。但是你能告诉我更多关于你需要什么吗,描述并没有告诉我们你需要什么。
  • 我只想要 1 个包含 n 个对象的数组。所有对象都具有相同的属性:a、b、c、d。我想我不能使用 json_encode
  • 你能显示这个输入[{1,1,3,5},{3,1,7,7},{3,5,7,1}]的真实结构吗(因为它是无效的符号)?您当前的对象有哪些属性集?
  • 那些对象的属性呢?目前它看起来像“XY”问题(meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。

标签: php arrays object


【解决方案1】:

在 PHP 中无法像在 JavaScript 或其他语言中那样编写对象字面量。

在 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);
}

然后使用usortb 属性传递给比较器

// 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);

【讨论】:

  • 谢谢!!然后我怎么能按属性 b 排序我的数组?
  • b 是什么类型的值?一个整数?
  • 是的,是整数
  • @LigaVirtualF1 我添加了有关如何排序的信息
猜你喜欢
  • 2021-04-29
  • 1970-01-01
  • 2013-12-09
  • 1970-01-01
  • 2013-12-16
  • 1970-01-01
  • 1970-01-01
  • 2019-06-20
  • 1970-01-01
相关资源
最近更新 更多