在PHP中将数组的第一个元素转换为字符串

37
我有一个PHP数组,想将其转换为字符串。 我知道我可以使用`join`或`implode`,但在我的情况下,数组仅有一个项目。为什么我必须使用组合只有一个项目的数组的值呢? 这个数组是我的PHP函数的输出,它返回一个数组:
Array(18 => 'Something');
如何将此转换为字符串?

3
取决于你想要从上面的数组中得到什么样的字符串作为结果。 - shinkou
13个回答

40

有没有其他方法可以将该数组转换为字符串?

你不想把数组转换成字符串,你想要获取该数组唯一元素的值,如果我理解正确。

<?php
  $foo = array( 18 => 'Something' );
  $value = array_shift( $foo );
  echo $value; // 'Something'.

?>

使用array_shift函数,您不必担心索引。

注意:array_shift并不是唯一会返回单个值的函数。array_pop(), current(), end(), reset()等函数都会返回单个元素。所有已发布的解决方案都有效。然而,使用array_shift,您可以确保始终只获取数组的第一个值,即使有多个值也是如此。


1
刚刚使用这段代码分别运行了这两个函数一百万次。array_shift用时1.81秒,reset用时1.71秒。这基本上意味着每次调用reset比array_shift快约0.0000001秒。如果你担心这个问题,那么你就是有史以来最高效的程序员了。;) - Berry Langerak
2
使用最有效的方法来实现目标没有问题,但我发现 array_shift 更能描述目标,所以我使用它。reset() 在性能上略优,但它并不能很好地传达其目标,所以我选择 array_shift。这不是过度设计,而是经过深思熟虑的选择。😊 - Berry Langerak
虽然 resetarray_shift 都是用来操作数组的函数,但它们之间有一个重大的区别。array_shift 会移除数组中的第一个元素并保持内部指针不变,而 reset 则会保留数组但重置内部指针。 - bzeaman

28

有其他的方法将该数组转换为字符串吗?

是的,有。可以使用serialize()函数。它可以将不同的数据类型(包括对象和数组)转换为字符串表示形式,稍后可以使用unserialize()函数进行反序列化。对于像Array(18 => 'Somthing')这样的关联数组进行序列化将保留键和值:

<?php
$a = array(18 => 'Something');
echo serialize($a);                                   // a:1:{i:18;s:9:"Something";}
var_dump(unserialize('a:1:{i:18;s:9:"Something";}')); // array(1) {
                                                      //   [18]=>
                                                      //   string(9) "Something"
                                                      // }

11

将数组转换为 PHP 字符串数组的简单方法是:

<?PHP
    $array = array("firstname"=>"John", "lastname"=>"doe");
    $json = json_encode($array);
    $phpStringArray = str_replace(array("{", "}", ":"), 
                                  array("array(", "}", "=>"), $json);
    echo phpStringArray;
?>

1
如果在字符串字面量中嵌入了 {}:,代码将无法正常工作。您需要一个适当的解析器。 - bcosca
1
这个答案对我帮助最大。谢谢Sven。 - Samiron
2
虽然我有点晚了:这似乎不是最好的解决方案。如果你想要做到这一点,只需调用 var_export($array, true);,它会做得更好,而且几乎相同。 - Berry Langerak

8
您可以使用reset()函数,它将返回数组的第一个成员。

它还将重置数组的内部指针到第一个成员。 - binaryLV
1
@binaryLV 他说这个数组只有一个成员,所以我认为不会有问题。 - Paolo Stefan
是的,那只是一个补充 - 以防他将 reset() 与其他数组一起使用。 - binaryLV

6

implode 或者 join(它们是完全相同的)可以在这里使用。或者,您可以只调用array_pop并获取数组中唯一元素的值。


5
如果您的目标是将数组输出为字符串以进行调试:可以使用print_r()函数,该函数接收一个表达式参数(即您的数组)和一个可选的布尔返回参数。通常该函数用于回显数组,但如果将返回参数设置为true,则它将返回数组印象。
例如:
    //We create a 2-dimension Array as an example
    $ProductsArray = array();

    $row_array['Qty'] = 20;
    $row_array['Product'] = "Cars";

    array_push($ProductsArray,$row_array);

    $row_array2['Qty'] = 30;
    $row_array2['Product'] = "Wheels";

    array_push($ProductsArray,$row_array2);

    //We save the Array impression into a variable using the print_r function
    $ArrayString = print_r($ProductsArray, 1);

    //You can echo the string
    echo $ArrayString;

    //or Log the string into a Log file
    $date = date("Y-m-d H:i:s", time());
    $LogFile = "Log.txt";
    $fh = fopen($LogFile, 'a') or die("can't open file");
    $stringData = "--".$date."\n".$ArrayString."\n";
    fwrite($fh, $stringData);
    fclose($fh);

这将是输出结果:
Array
(
    [0] => Array
        (
            [Qty] => 20
            [Product] => Cars
        )

    [1] => Array
        (
            [Qty] => 30
            [Product] => Wheels
        )

)

4
你可以使用 print_r 并将其解释为 HTML,以便将其转换为带有换行符的字符串,例如:
$arraystring = print_r($your_array, true); 

$arraystring = '<pre>'.print_r($your_array, true).'</pre>';

如果您这样做,您可以混合许多数组和变量:

ob_start();
print_r($var1);
print_r($arr1);
echo "blah blah";
print_r($var2);
print_r($var1);
$your_string_var = ob_get_clean();

4

For()循环非常有用。您可以像这样将数组的值添加到另一个变量中:

<?php
    $dizi=array('mother','father','child'); //This is array

    $sayi=count($dizi);
    for ($i=0; $i<$sayi; $i++) {
        $dizin.=("'$dizi[$i]',"); //Now it is string...
    }
         echo substr($dizin,0,-1); //Write it like string :D
?>

在这段代码中,我们将$dizi数组的值和逗号添加到了$dizin变量中: $dizin.=("'$dizi[$i]',"); 现在,$dizin包含了$dizi数组中所有值,并在每个值之间插入了逗号。
$dizin = 'mother', 'father', 'child',

这是一个字符串,但它多了一个逗号 :)

然后我们删除了最后一个逗号,substr($dizin, 0, -1);

输出:

'母亲','父亲','孩子'


1
在这里,您正在编写一个基本上是人类可读的文本而不是数据库函数的答案。有一个自动过程评估答案,而您的答案被标记为低质量。我想这是因为它似乎缺乏解释。 - IvanH
我现在添加了解释 :) - BARIS KURT

3
使用PHP内置函数implode(array, separator)
<?php
    $ar = array("parth","raja","nikhar");
    echo implode($ar,"/");
?>

结果:parth/raja/nikhar

2
今日免费次数已满, 请开通会员/明日再来
  1. Use the PHP join function like this:

    $my_array = array(4, 1, 8);
    
    print_r($my_array);
    Array
    (
        [0] => 4
        [1] => 1
        [2] => 8
    )
    
    $result_string = join(',', $my_array);
    echo $result_string;
    

    Which delimits the items in the array by comma into a string:

    4,1,8
    
  2. Or use the PHP implode function like this:

    $my_array = array(4, 1, 8);
    echo implode($my_array);
    

    Which prints:

    418
    
  3. Here is what happens if you join or implode key value pairs in a PHP array

    php> $keyvalues = array();
    
    php> $keyvalues['foo'] = "bar";
    
    php> $keyvalues['pyramid'] = "power";
    
    php> print_r($keyvalues);
    Array
    (
        [foo] => bar
        [pyramid] => power
    )
    
    php> echo join(',', $keyvalues);
    bar,power
    php> echo implode($keyvalues);
    barpower
    php>
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接