我有一个像这样的简单对象(或数组)...
stdClass Object (
[people] => Array
(
[0] => stdClass Object (
[name] => 'John',
[age] => 50,
)
[0] => stdClass Object (
[name] => 'Martin',
[age] => 47,
)
)
我可以使用这样的foreach轻松遍历它
foreach ($people as $person) {
echo $person->name . '<br>';
}
但是我想以某种更短的方式来用这样的方式呼应所有名称...
print_each($people->name)
仅用一小段代码就能完成与我的3行foreach代码完全相同的事情。
是否有这样的函数,或者我们将如何创建这样的函数?
答案 0 :(得分:4)
可能... | time="2018-09-12T14:03:48Z" level=debug msg="originLabelsmap[com.docker.stack.namespace:cs-api com.docker.stack.image:redis]"
... | time="2018-09-12T14:03:48Z" level=debug msg="allLabelsmap[:map[]]"
... | time="2018-09-12T14:03:48Z" level=debug msg="Filtering container without port, cs-api_redis.1: port label is missing, please use traefik.port as default value or define port label for all segments ('traefik.<segment_name>.port')"
... | time="2018-09-12T14:03:48Z" level=debug msg="originLabelsmap[com.docker.stack.image:traefik com.docker.stack.namespace:cs-api]"
... | time="2018-09-12T14:03:48Z" level=debug msg="allLabelsmap[:map[]]"
... | time="2018-09-12T14:03:48Z" level=debug msg="Filtering container without port, cs-api_loadbalancer.1: port label is missing, please use traefik.port as default value or define port label for all segments ('traefik.<segment_name>.port')"
最接近您想要的内容。
array_map
答案 1 :(得分:4)
您可以使用array_column并进行爆破。
echo implode("<br>\n", array_column($arr, "name"));
答案 2 :(得分:2)
最短的方法(不是最丑陋的方法)是添加一个 __ toString 这样的Person对象的方法:
class Person {
public $name;
public function __toString()
{
return (string) $this->name;
}
}
然后,您可以使用超短格式:
array_walk($people, 'printf');
语法。
答案 3 :(得分:1)
如果有数组,则可以使用array_column
:
$people = [
['name' => 'John', 'age' => 3],
['name' => 'Carl', 'age' => 43]
];
var_dump(
array_column($people, 'name')
);
/*
array(2) {
[0]=>
string(4) "John"
[1]=>
string(4) "Carl"
}
答案 4 :(得分:0)
如果您想对此“智能”,可以编写如下内容:
array_walk_recursive($a, function($v, $k) {echo $k === 'name' ? $v : '';});
但是对可读性保持精明总是一个坏主意。
答案 5 :(得分:0)
如果我必须编写一个函数来做到这一点,那将是这些事情:
WinForms
可以这样使用:
function print_each($collection, $property) {
foreach ($collection as $item) {
echo $item->$property . "<br />";
}
}