4 votes

Chaînes de caractères en tant que tableaux

En PHP, ce qui suit est valable :

$n='abc';
echo $n[1];

Mais il semble que 'abc'[1]; ne l'est pas.

Y a-t-il un problème avec son analyseur syntaxique ?

Malheureusement, actuellement, même $n[1] n'est pas très utile, car elle ne prend pas en charge Unicode et renvoie des octets au lieu de lettres.

10voto

Baba Points 49157

echo 'abc'[1]; n'est valable que dans PHP 5.5 voir le RFC complet mais $n[1] or $n{2} es valide dans toutes les versions de PHP

Voir le test en direct

Malheureusement, actuellement, même $n[1] n'est pas très utile, car elle ne prend pas en charge Unicode et renvoie des octets au lieu de lettres.

Pourquoi ne pas simplement créer le vôtre ? Exemple :

$str = "Büyük";
echo $str[1], PHP_EOL;

$s = new StringArray($str);
echo $s[1], PHP_EOL;

// or

echo new StringArray($str, 1, 1), PHP_EOL;

Sortie

ü
ü

classe Utilisé

class StringArray implements ArrayAccess {
    private $slice = array();

    public function __construct($str, $start = null, $length = null) {
        $this->slice = preg_split("//u", $str, - 1, PREG_SPLIT_NO_EMPTY);
        $this->slice = array_slice($this->slice, (int) $start, (int) $length ?  : count($this->slice));
    }

    public function slice($start = null, $length = null) {
        $this->slice = array_slice($this->string, (int) $start, (int) $length);
        return $this ;
    }

    public function offsetSet($offset, $value) {
        if (is_null($offset)) {
            $this->slice[] = $value;
        } else {
            $this->slice[$offset] = $value;
        }
    }

    public function offsetExists($offset) {
        return isset($this->slice[$offset]);
    }

    public function offsetUnset($offset) {
        unset($this->slice[$offset]);
    }

    public function offsetGet($offset) {
        return isset($this->slice[$offset]) ? $this->slice[$offset] : null;
    }

    function __toString() {
        return implode($this->slice);
    }
}

1voto

Jeff Cashion PhD Points 604

Non, c'est le bon fonctionnement. Pour faire ce que vous essayez de faire, vous pouvez essayer :

echo substr('abc', 1, 1);

0voto

silkfire Points 5745

La syntaxe d'accès aux chaînes littérales 'abc'[1] est tout à fait valide en JavaScript, mais ne sera pas supporté en PHP avant la version 5.5 .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X