2009-02-23 86 views
2

$ clients = $ CLIENT-> find($ options); $ client = $ clients [0];有没有办法一步到位呢?

编辑:我意识到我应该更清楚。 $ CLIENT-> find总是返回一个对象数组,但我想要一行代码将数组(只有一个对象)转换为一个对象。

回答

7
$client = array_shift($CLIENT->find($options)); 
+0

谢谢,应该已经看到了这里一英里远 – fakingfantastic 2009-02-23 20:10:49

0

除非($CLIENT->find($options))[0]工程(IIRC我不认为它在PHP中有效,但不要拿我的话),我不认为你可以压缩这一点。不过,我真的不认为值得担心 - 如果你需要一个单语句表达式,只需编写一个函数即可。

function fozzyle($options) { 
    $clients = $CLIENT->find($options); 
    return $clients[0]; 
} 
0

$ client = $ CLIENT-> find($ options)[0];

不起作用?

+0

直到现在,这就是要点。这将有望在PHP 6中得到解决。 – 2009-02-23 18:44:09

4
$client = reset($CLIENT->find($options)); 

编辑:这里有一个不太令人模糊,你应该用这个来代替:

list($client) = $CLIENT->find($options); 

他们是不相同的,虽然;第一个也会在预期有单个标量的地方工作(在函数的参数列表中),但第二个不会(list()返回void)。

+0

这确实有用,但我个人建议不要使用它。问题中两行代码的目的比这个简明版本更加清晰。 – 2009-02-23 18:47:35

+0

好点,我也会添加更好的。 – flussence 2009-02-23 19:07:01

0

你考虑过method-chaining吗?

这将允许您只用一行代码就可以做很多事情。还要注意,这对于更大和更长期的OO解决方案会更好。如果你只需要一个快速和肮脏的解决方案,可能只是一个返回数组中第一个项目的自定义函数。

帮助:如果有人可以找到一个更好的方法链参考,请更新此。

0

$ client = array_shift($ CLIENT-> find($ options));

$ client将是你的对象或NULL如果find()不返回任何东西。

相关问题