【问题标题】:Is there a way to do this in one step?有没有办法一步完成?
【发布时间】:2009-02-23 18:38:13
【问题描述】:

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

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

【问题讨论】:

    标签: php arrays


    【解决方案1】:
    $client = array_shift($CLIENT->find($options));
    

    【讨论】:

      【解决方案2】:
      $client = reset($CLIENT->find($options));
      

      编辑:这是一个不太模糊的,你应该改用这个:

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

      但它们并不相同;第一个也适用于需要单个标量的地方(在函数的参数列表中),但第二个不行(list() 返回 void)。

      【讨论】:

      • 这确实有效,但我个人建议不要使用它。题中两行代码的目的比这个精简版要清楚很多。
      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        没有用?

        【讨论】:

        • 直到现在,这才是重点。这有望在 PHP 6 中得到修复。
        【解决方案5】:

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

        $client 将是您的对象,如果 find() 没有返回任何内容,则为 NULL。

        【讨论】:

          【解决方案6】:

          你考虑过method-chaining吗?

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

          帮助:如果有人能找到更好的方法链参考,请更新。

          【讨论】:

          • 这是一个很棒的解决方案,但是是的 - 我一直在寻找快速而肮脏的解决方案。
          猜你喜欢
          • 2012-11-07
          • 1970-01-01
          • 2018-09-24
          • 2019-08-19
          • 1970-01-01
          • 1970-01-01
          • 2022-08-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多