【问题标题】:Two object arrays in nested foreach嵌套 foreach 中的两个对象数组
【发布时间】:2013-02-13 14:06:46
【问题描述】:

我有两个变量:

  • $foo - client1、client2、client3(一个对象数组)
  • $bar - 名称、id、营业额(字符串数组)

如果我回显客户端 1 的 $foo->name,它会返回成功值,但是:

foreach ($foo as $key1 => $value1) {

  foreach ($bar as $key2 => $value2) {

    echo $value2->$value1; // THIS IS NOT WORKING

  }

}

希望我很清楚;我想返回这些值:

client1's name
client1's id
client1's turnover
client2's name 
client2's id
etc...

这是成功的:

foreach($foo as $client) {

  echo $client->name."<br>";
  echo $client->id."<br>";
  echo $client->billable."<br>";

}

返回客户名称、他的 ID 以及他是否可以为每个客户计费。但是上面的代码不起作用。名称、id 和 billable 存储在一个字符串中:

$bar = array ([0] => name, [1] => id, [2] => billable )

【问题讨论】:

  • $bar 是字符串数组吗?你提到它是一个对象,这是行不通的。
  • 你能生产 var_dump($foo, $bar); ?
  • 调试提示:在第一个循环中,执行print_r($value1) 以查看外部循环是否正常。
  • (旁白:请务必花时间回复帮助您的 cmets,并感谢您接受其回答的人 :))。

标签: php variables object


【解决方案1】:

为变量赋予有意义的名称,并使用花括号访问:

foreach ($clients as $i => $client) {

  foreach ($keys as $j => $key) {

    echo $client->{$key};

  }

}

【讨论】:

  • +1 表示有意义的名称 - 非常有用!如果用于真正的代码,Foo 和 bar 会很糟糕(我想除非一个有 foo 和 bar 的集合)。
  • 不,这只是一个例子,我在那里有有意义的名字..但这似乎对我不起作用
  • 难道我们不应该得到有意义的名字吗? : D
【解决方案2】:

你需要更换

$value2->$value1

$value1->$value2

如果我理解正确的例子

$bar = array("name", "id", "turnover");
$foo = array(
        (object) array_combine($bar,range(1,3)),    //client 1
        (object) array_combine($bar,range("A","C")),    //client 2
        (object) array_combine($bar,range("X","Z")),    //client 3
);



foreach ($foo as $key1 => $value1) {
    foreach ($bar as $key2 => $value2) {
        echo "Clients $key1 $value2 = ",$value1->$value2 ,PHP_EOL; // THIS IS NOT WORKING
    }
    echo PHP_EOL ;
}

输出

Clients 0 name = 1
Clients 0 id = 2
Clients 0 turnover = 3

Clients 1 name = A
Clients 1 id = B
Clients 1 turnover = C

Clients 2 name = X
Clients 2 id = Y
Clients 2 turnover = Z

【讨论】:

  • 好地方,错过了!
【解决方案3】:

这是有效的:

$foo = array( "client1", "client2", "client3"); 
$bar = array("name","id", "turnover");

foreach ($foo as  $value1) {
    foreach ($bar as $value2) {
        echo $value1 . "->" . $value2 . "\n";
    }
}

http://sandbox.onlinephpfunctions.com/code/ebdba5ef40498d4ead4be9a281f715565717471a

我不知道你的问题出在哪里,我猜是错字。你没有写出你的输出,你的代码是半伪代码(例如连接你不使用的两个值->) .您应该提供更多详细信息和更准确的代码。

【讨论】:

  • 我和你差不多同时意识到了!
  • 无法将对象转换为字符串
猜你喜欢
  • 1970-01-01
  • 2020-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-21
  • 1970-01-01
  • 2018-09-19
  • 1970-01-01
相关资源
最近更新 更多