【问题标题】:PHP append data to array objectPHP将数据附加到数组对象
【发布时间】:2013-09-08 12:58:19
【问题描述】:

在 PHP 中,我有一个数组 $test。运行var_dump($test) 看起来像这样:

array(2) {
  [0]=>
  object(stdClass)#2 (6) {
    ["name"]=>
    string(45) "Lorem"
    ["title"]=>
    string(96) "Lorem ipsum"
  }
  [1]=>
  object(stdClass)#3 (6) {
    ["name"]=>
    string(41) "Ipsum"
    ["title"]=>
    string(86) "Dolor sit amet"
  }
}

现在我需要将另一个字段 (url) 添加到 $test 对象,所以它看起来像:

array(2) {
  [0]=>
  object(stdClass)#2 (6) {
    ["name"]=>
    string(45) "Lorem"
    ["title"]=>
    string(96) "Lorem ipsum"
    ["url"]=>
    string(86) "http://www.google.com"
  }
  [1]=>
  object(stdClass)#3 (6) {
    ["name"]=>
    string(41) "Ipsum"
    ["title"]=>
    string(86) "Dolor sit amet"
    ["url"]=>
    string(86) "http://www.stackoverflow.com"
  }
}

我尝试了foreach()$test->append('xxxxxxxx');,但出现错误。这不应该很容易做到吗?我做错了什么?

【问题讨论】:

标签: php arrays object


【解决方案1】:

你很亲密:

foreach( $test as $t ) {
    $t->url = "http://www.example.com";
}

当您真正处理 stdClass object 时,您似乎正在尝试使用 append()ArrayObject 的方法)。

【讨论】:

  • @Whymarrh 正在努力;)
  • 如您所见,我对数组对象了解不多。你的答案有效!感谢那!但我对此一无所知“当您真正处理 stdClass 对象时,您似乎正在尝试使用 append() (ArrayObject 的一种方法)。”是的,我尝试使用附加,是的,它是 ArrayObject 的一种方法。我怎么能这样做呢?
  • @caramba ArrayObject::append() 仅适用于 ArrayObject 的实例并且只接受一个值,因此对于您的情况,您不会真的想使用它,因为您正在处理包含的 Array stdClass 对象,您还需要定义一个属性 (url)。
【解决方案2】:

Append 用于将整个对象附加到另一个对象。只需使用普通对象引用 (obj->value) 来分配 url


$objectOne = new \stdClass();
$objectOne->name = 'Lorem';
$objectOne->title = 'Lorem ipsum';

$objectTwo = new \stdClass();
$objectTwo->name = 'Ipsum';
$objectTwo->title = 'Dolor sit amet';

$test = array(
    0 => $objectOne,
    1 => $objectTwo
);

$urls = array(
    0 => 'http://www.google.com',
    1 => 'http://www.stackoverflow.com'
);

$i = 0;
foreach ($test as $site) {
  // Add url from urls array to object
  $site->url = $urls[$i];

  $i++;
}

var_dump($test);

输出:

array(2) {
  [0]=>
  object(stdClass)#1 (3) {
    ["name"]=>
    string(5) "Lorem"
    ["title"]=>
    string(11) "Lorem ipsum"
    ["url"]=>
    string(21) "http://www.google.com"
  }
  [1]=>
  object(stdClass)#2 (3) {
    ["name"]=>
    string(5) "Ipsum"
    ["title"]=>
    string(14) "Dolor sit amet"
    ["url"]=>
    string(28) "http://www.stackoverflow.com"
  }
}

【讨论】:

  • foreach 内的计数器最好使用简单的for 循环来编写,特别是因为$test$urls 的长度相同。您也不需要在数组上指定索引,甚至不需要$result
  • @AndréDion:但我们不知道他是如何添加网址的,这只是一个快速模型作为示例 ^^ 我猜他有某种查询来检查每个标题的网址,或者东西。
猜你喜欢
  • 2019-07-06
  • 1970-01-01
  • 2019-05-18
  • 1970-01-01
  • 2020-08-15
  • 1970-01-01
  • 2017-06-06
  • 2016-06-28
  • 1970-01-01
相关资源
最近更新 更多