【问题标题】:How to return a key=>value pair from a function in PHP如何从 PHP 中的函数返回 key=>value 对
【发布时间】:2011-12-01 20:41:12
【问题描述】:

我需要从一个函数返回一个键值对。最好保留数据的结构。如果可能,我想避免创建一个只有一个值的数组,因为我不关心语法 key($result[0]) 或具有两个值的数组,因为我想要一些语法或结构暗示键 => 值关系的东西值之间。有没有比数组更优雅的替代方法来从 php 中的函数返回多个值?

【问题讨论】:

  • 我不知道,数组在我看来非常优雅,
  • list() 可能会更好一点:list($key, $val) = myfunc();。仍然需要您从函数中返回一个数组
  • 如果不是数组,您首选的返回格式是什么?如果在数组中,您将不得不调用 key() 或创建一个数组,其中一个插槽中的键和另一个 Array("key" => $key, "val" = $val) 中的值

标签: php return-value key-value


【解决方案1】:

你只能使用array(),真的。

return array("key1" => "value1", "key2" => "value2");

其他任何事情都会更丑陋或更令人困惑。

【讨论】:

  • 2021 年:你可以简单地...返回 ["key1" => "value1", "key2" => "value2"];
【解决方案2】:

怎么样:

function getData () {
  return array('key','value');
}

list($key,$value) = getData();
echo $key." = ".$value;

虽然我必须说,这听起来像是一个奇怪的具体要求,而且很大程度上是表面上的要求......

【讨论】:

  • 该函数是 API 包装器的一部分,它以深度嵌套的数组结构返回每个请求的结果。我正在尝试删除尽可能多的无意义嵌套层,并创建一个 $service_token=>$status 对数组。当添加新令牌时,来自服务器的响应会返回(作为一个疯狂的嵌套数组结构)。我上课的重点是消除嵌套数组。从两个嵌套数组中解包数据以便将其打包回数组中似乎很愚蠢。我想那是“化妆品”,但并不是真正的“奇怪”。为什么这么“评判”?
  • @SinthiaV 这是一个公平的评论,但同样,如果您将这些信息添加到问题中,它可能不会邀请那些被捆绑在一起的难以置信的答案/cmets......它总是值得添加为尽可能多地(相关)信息,因为它通常会导致某人为您提供一种全新的方法来解决整个问题,而不仅仅是解决某个特定部分的问题。但我确实同意你关于将一次性 cmets 作为答案的一部分的观点,我会为你的评论 +1 以表示没有不好的感觉:-D
  • 我接受了你的回答,因为当我从数组中提取有用数据时,使用更远的列表实际上是有意义的。
【解决方案3】:

你不能像这样返回数组中的值吗?

return array('key' => $key, 'value' => $value);

你也可以这样做:

return array($key => $value);

但在我看来,这涉及到事后使用的更多工作。

【讨论】:

  • 也许我只是不明白真正的问题。
【解决方案4】:

返回一个数组。

return array("key" => "value");

【讨论】:

    【解决方案5】:

    这是@polynomial 提出的一个可能很有趣的完整示例:

    //Function declaration with a return of a key value pair array
    function getUserRating(){
      return array(
        'rating' => $rating, 
        'average'  => $average
      );
    }
    
    // Retrieve one of the key value pair 
    getUserRating()['rating'];
    // Retrieve the other key value pair 
    getUserRating()['average'];
    

    认为这种魔法只适用于 PHP 7 或更高版本?我的天啊!它适用于 PHP 5.4!

    【讨论】:

      【解决方案6】:

      是我误解了你的问题,还是你不想return array('aKey' => 'aVal');

      【讨论】:

      • 您至少可以提供您反对投票的理由,并给我提供帮助的机会。这个答案与发布的其他 3 个答案没有什么不同。
      • 我猜这可能是运气不好,尽管查看其他两个类似的答案,您的答案可能被解释为“打算作为评论”。我没有投反对票;只是猜测。
      • 没什么大不了的——只是烦人。
      猜你喜欢
      • 1970-01-01
      • 2019-04-26
      • 2011-12-14
      • 2012-08-31
      • 1970-01-01
      • 2018-10-10
      • 2015-10-09
      • 1970-01-01
      相关资源
      最近更新 更多