字符串中的字符串数组

时间:2015-01-23 09:47:01

标签: php arrays

为什么这是编译错误:

<?php
class Bean
{
    public $text = array("123", "456");
    public $more = array("000 {$this->text[0]} 000", "--- {$this->text[1]} ---");

}

?>

编译器说PHP Parse error: syntax error, unexpected '"'

如何在其他数组中使用我的文本数组?

3 个答案:

答案 0 :(得分:3)

如前所述,你不能(直接)使用当前版本的php。即使是php 5.6的新功能也不允许这样做,请参阅http://php.net/manual/en/migration56.new-features.php
但是,让我们假设你有一个有效的兴趣,例如在类的更具说明性的部分中保留/分组某些内容而不是将其隐藏在一堆代码中,你可以做一些事情(可能是一个&#34; bit&#34;更复杂;-)),如

<?php
class Bean
{
    public $text = array("123", "456");
    public $more = array('000 %1$s 000', '--- %2$s ---');

    public function Bean() {
        foreach($this->more as $k=>&$v) {
            $v = vsprintf($v, $this->text);
        }
    }
}

$b = new Bean;
print_r($b->more);

答案 1 :(得分:1)

你在那一行做了什么:

public $more = array("000 {$this->text[0]} 000", "--- {$this->text[1]} ---");

无法使用PHP。

http://php.net/manual/en/language.oop5.properties.php

在这里,您可以看到该示例中属性的有效值和无效值。因此,如果您使用双引号PHP尝试解析字符串。

http://php.net/manual/en/language.types.string.php#language.types.string.syntax.double

因此,您必须将"替换为',然后才能使用

public $more = array('000 {$this->text[0]} 000)', '(--- {$this->text[1]} ---)');

您可以做的是在该变量中设置占位符,然后在需要vsprintf之前替换它们。

答案 2 :(得分:0)

你可以这样做:

class Bean
{
public $text = array("123", "456");

public function fillMore () {
    $more = array();
    $more[0] = "000 ".$this->text[0]." 000";
    $more[1] = "000 ".$this->text[1]." 000";

    var_dump($more);
}
}

$bean = new Bean();
$bean->fillMore();

或者,您也可以尝试在构造函数中填充$more。 这会在您初始化课程时为您提供$more