【问题标题】:Why are the commas in my array reading as a string?为什么我的数组中的逗号读取为字符串?
【发布时间】:2009-11-18 09:41:15
【问题描述】:

这就是我想要做的:

1 - 我有一个带有字符串的数组。

$photographer_array = "'Alberto Korda', 'Annie Leibowitz', 'Ansel Adams'";

2 - 我正在尝试使用该字符串填充数组。

array($photographer_array);

它所做的是创建一个包含所有逗号的单个条目的数组。为什么将逗号读取为字符串?无论如何我可以让它不将逗号作为字符串读取,而是使用它们来分隔数组中的值?

【问题讨论】:

    标签: php arrays string


    【解决方案1】:

    很抱歉,您不能以这种方式填充数组,因为字符串通常不会被解析和执行。你所能做的就是:

    $photographer_array = array('Alberto Korda', 'Annie Leibowitz', 'Ansel Adams');
    

    或者这个(编辑:根据您的查询代码改编):

    $photographer_array = array();
    
    while ($photographer_row = $result->fetch_assoc()) {
        $photographer_array[] = $photographer_row['photographer_name'];
    }
    

    P.S.:你只是喜欢长变量名,不是吗? ;)

    【讨论】:

    • 非常感谢弗朗茨!效果很好!很抱歉让大家感到困惑。我应该马上给你看我的查询。感谢所有快速回复!
    • 是的,我在该页面上运行了多个查询,所以我希望清楚哪个是哪个,因此是长变量名。我猜是个奇怪的习惯
    【解决方案2】:

    这是因为$photographer_array 一个字符串,使用array($photographer_array) 只是将你的字符串放入数组中。

    也许你想做:

    $photographer_array = explode(',', "'Alberto Korda', 'Annie Leibowitz', 'Ansel Adams'");
    

    这会给你

    array(3) {
      [0]=>
      string(15) "'Alberto Korda'"
      [1]=>
      string(18) " 'Annie Leibowitz'"
      [2]=>
      string(14) " 'Ansel Adams'"
    }
    

    或者你想要的:

    $photographer_array = array('Alberto Korda', 'Annie Leibowitz', 'Ansel Adams');
    // ...
    

    编辑:

    关于您发布的代码 - 以下将为您提供$photographer_row['photographer_name'] 的数组:

    // ...
    $photographer_array = array();
    while($photographer_row = $result->fetch_assoc()) {
        $photographer_array[] = $photographer_row['photographer_name'];
    }
    

    【讨论】:

    • 是的,这正是我所需要的。弗朗茨打败了你。感谢您的帮助!
    【解决方案3】:

    它将字符串读取为字符串,因为您将其括在引号 ( " ) 中。如果您想正确执行,请尝试:

    $array = array('Alberto Korda', 'Annie Leibowitz', 'Ansel Adams');

    或者:

    $string = "Alberto Korda, Annie Leibowitz, Ansel Adams"; $arr = explode(',', $string);

    【讨论】:

      【解决方案4】:

      您会注意到变量$photographer_array 设置为单个字符串(其值是双引号之间的所有内容)。 php 中的数组函数接受由逗号分隔的对象列表。虽然您的 $photographer_array 变量中有逗号,但它们被认为是字符串中的字符而不是实际的分隔符,因此您实际上只是创建了一个只有一个值的数组,而该数组恰好是一个字符串。您可能想要的是以下内容:

      $photographer_array = array('Alberto Korda', 'Annie Leibowitz', 'Ansel Adams');
      

      【讨论】:

        【解决方案5】:

        如果您可以访问 PHP >= 5.3.0,则可以使用 str_getcsv,它将逗号分隔的字符串解析为数组。

        【讨论】:

        • str_getcsv() 是一个 PHP >= 5.3.0 函数。只是要注意这一点。
        【解决方案6】:

        Explode() 是你需要的...

        http://php.net/manual/en/function.explode.php

        【讨论】:

        • 如果值本身包含逗号,那将会很痛苦。
        • 对于 Chris 真正想要的东西也不是正确的,虽然你显然不知道...
        【解决方案7】:

        我实际上是使用查询中的值创建一个数组,这样你就知道我为什么这样做了。这是我用来创建在我的数组中使用的字符串的代码。

        $sql = "SELECT photographers.photographer_name
                FROM photographers
                ORDER BY photographer_name ASC
                LIMIT 3";
        
        $result = $conn->query($sql) or die(mysqli_error());
        
        $photographer_array = '';
        
        while($photographer_row = $result->fetch_assoc()) {
        $photographer_array .= "'" . $photographer_row['photographer_name'] . "', ";
        }
        
        $photographer_array = rtrim($photographer_array, ", ");
        
        array($photographer_array);
        

        【讨论】:

        • 在这种情况下,请使用我的第二种方法。
        • 这不会改变任何事情。 $photographer_array 是一个字符串,句号。为什么不将值推入数组而不是将它们连接成字符串?
        • 你知道,PHP 不是强类型的,但这并不意味着它会在看起来像写出的数组和数组的字符串之间进行动态转换。
        • nOrd,这就是 Franz 的第二种方法所做的,我现在已经应用了它。而($photographer_row = $result->fetch_assoc()) { $photographer_array[] = $photographer_row['photographer_name']; }
        【解决方案8】:

        如果您需要一个字符串来创建一个数组,请使用:

        $photographer_array = "'Alberto Korda', 'Annie Leibowitz', 'Ansel Adams'";

        eval("\$myArray = array(" . $photographer_array . ");");
        

        使用后$myArray

        【讨论】:

          猜你喜欢
          • 2021-07-26
          • 1970-01-01
          • 2017-03-15
          • 2012-10-27
          • 1970-01-01
          • 1970-01-01
          • 2017-11-01
          • 2021-12-18
          相关资源
          最近更新 更多