【问题标题】:php how to generate dynamic list()?php如何生成动态列表()?
【发布时间】:2012-09-23 06:09:44
【问题描述】:

根据我的理解,这就是 list() 的工作原理。

list($A1,$A2,$A3) = array($B1,B2,B3);

因此,在list() 的帮助下,我们可以相应地从数组中赋值。
这是我的问题...如何生成动态列表()?

1)。基于数据库返回结果,我不确定其中有多少,但我将其全部分配到数组中
2)。所以我们可以使用 count(array) 来知道它有多少。
3)。那么我该如何生成/准备一个列表呢?

示例:客户 A,有 3 个孩子,姓名为 Apple、Boy、Cat 所以我使用list($kid1, $kid2, $kid3)

但是当客户 B 有 3 个以上的孩子时,我只得到前 3 个 或者如果客户 C 只有 1 个孩子,则会遇到错误。

我知道如果基于上述情况,有很多方法可以不使用list()来解决它 但我想知道或使用list() 找出解决方案。

如何根据array()的计数生成动态list()

谢谢大家

【问题讨论】:

  • 为什么要使用list?为什么不简单地通过它们的索引来访问它们呢?在这种情况下使用list 似乎没有任何收获......
  • @JosephSilber i know if base on the situation above, there is many way to solve it without using list() but i wish to know or find out the solution with using list(). 来自问题
  • 约瑟夫,他确实说明了原因:好奇心
  • 您可以在数组上使用extract(),在当前范围内创建变量...
  • @LoSauer - 这只适用于关联数组。

标签: php list variables extract


【解决方案1】:

如果您有可变数量的元素,请为它们使用 数组!如果您不知道要处理多少个变量,那么将它们提取到单个变量中是没有意义的。假设您确实将这些值提取到变量$kid1$kidN 中,那么接下来的代码会做什么?您现在不知道范围内有多少变量,并且在测试$kid1$kidN 是否为isset 之后,您没有实用的方法来找出或迭代它们。这是对变量的疯狂使用。只需使用数组即可。

话虽如此,variable variables:

$i = 1;
foreach ($array as $value) {
    $varname = 'kid' . $i++;
    $$varname = $value;
}

【讨论】:

  • +1 表示 这是对变量的疯狂使用。当然,这是一个简单易读的解决方案。
【解决方案2】:

为此,您可以使用create_function() 创建一个 lambda 表达式。 list() 只能在表达式中访问。

【讨论】:

    【解决方案3】:

    这将为数组中的每个元素创建变量$A1, $A2, .... $AN

    $list =  array("a", "b", "c", "d");
    
    extract(array_combine(array_map(function($i) {
            return "A" . $i;
        }, range(1, count($list))), $list));
    
    echo implode(" ", array($A1, $A2, $A3, $A4)), PHP_EOL;
    

    您可以在array_map 回调中修改变量的名称。我希望我永远不会在生产中看到这样的代码;)

    【讨论】:

      【解决方案4】:

      这不是 PHP 的 list 的用途。来自官方PHP docs

      list is not really a function, but a language construct. 
      list() is used to assign a list of variables in one operation.
      

      换句话说,编译器实际上并没有调用函数,而是直接将您的代码编译为变量和赋值的分配。

      • 您可以通过设置逗号来专门跳到给定元素,如下所示:

        list($var1, , $var2) = Array($B1, B2, B3);

        echo "$var1 is before $var2 \n";

      • 或者取第三个元素

        list( , , $var3) = Array($B1, B2, B3);

      (我假设 B2、B3 是常量?还是您缺少$?)

      具体使用list,可以使用PHP的variable variables从任意一维数组创建变量,如下:

      $arr = array("arrindex0" => "apple", "banana", "pear");
      reset($arr);
      while (list($key, $val) = each($arr)) {
          $key = is_numeric($key) ? "someprefix_" . $key : $key;
          echo "key sdf: $key <br />\n";
          $$key = $val;
      }
      var_dump($arrindex0, $someprefix_0, $someprefix_1);
      

      结果

      string 'apple' (length=5)
      string 'banana' (length=6)
      string 'pear' (length=4)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-06
        • 1970-01-01
        • 1970-01-01
        • 2021-11-21
        • 2014-09-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多