繁体   English   中英

PHP使数组值等于同一数组中的另一个值

[英]PHP make array value equal another value in the same array

我想知道是否可以将数组键分配给另一个键的值,例如:

$array = array(
    'key1' => 'Foo'
    'key2' => $array['key1']
    );

或类似的东西,但是我只是在期待其他东西的时候出现关于PHP的错误:

解析错误:语法错误,意外的'$ TYPE_LOCALES'(T_VARIABLE),期望标识符(T_STRING)或类(T_CLASS)…

有问题的数组所在的类如下:

final class UserTypes {
    const TYPE_ADMINISTRATOR = 1;
    const TYPE_CALL_CENTER_OP = 2;
    const TYPE_SALES_LEADER = 3;
    const TYPE_SALES_OP = 4;

    const TYPE_LOCALE_DEFAULT = 'default';
    const TYPE_LOCALE_ES = 'es';

    private static $TYPE_LOCALES = array(
        TYPE_LOCALE_DEFAULT => array(
            TYPE_ADMINISTRATOR => 'administrador',
            TYPE_CALL_CENTER_OP => 'agente de call center',
            TYPE_SALES_LEADER => 'partner líder',
            TYPE_SALES_OP => 'partner operador',
            ),
        TYPE_LOCALE_ES => self::$TYPE_LOCALES[TYPE_LOCALE_DEFAULT]
    );
}

如您所见,我正在尝试使“ es”键等于“ default”。 但是我不想提取默认数组(在数组外部定义它)然后在内部使用它,因为会有更多的数组,每个数组都等于其他数组。

更新:

这是我已经尝试过的:

TYPE_LOCALE_ES => self::$TYPE_LOCALES[TYPE_LOCALE_DEFAULT]

TYPE_LOCALE_ES => UserTypes::$TYPE_LOCALES[TYPE_LOCALE_DEFAULT]

TYPE_LOCALE_ES => $TYPE_LOCALES[TYPE_LOCALE_DEFAULT]

TYPE_LOCALE_ES => &$TYPE_LOCALES[TYPE_LOCALE_DEFAULT]

TYPE_LOCALE_ES => &self::$TYPE_LOCALES[TYPE_LOCALE_DEFAULT]

TYPE_LOCALE_ES => self::&$TYPE_LOCALES[TYPE_LOCALE_DEFAULT]

TYPE_LOCALE_ES => &UserTypes::$TYPE_LOCALES[TYPE_LOCALE_DEFAULT]

TYPE_LOCALE_ES => UserTypes::&$TYPE_LOCALES[TYPE_LOCALE_DEFAULT]

没有运气。

<pre>
<?php
// This will not work, because key1 is not defined yet (I guess)
$array = array(
    'key1' => 'Foo',
    'key2' => $array['key1']
);

print_r($array);

// But if you define a reference, it will work
$array = array(
    'key1' => 'Foo',
    'key2' => &$array['key1']
);

print_r($array);

输出:

Array
(
    [key1] => Foo
    [key2] => 
)
Array
(
    [key1] => Foo
    [key2] => Foo
)

关于其他问题:

在课堂上不可能做到这一点。 我尝试使用静态,非静态,也使用公共和私有的getter和setter方法。 没有机会。 不允许在以前尚未设置的类中分配值。 至少,我认为还可以。

在这里,您将了解如何运行:

final class Example {

    public $array = array(
        'key1' => 'Foo',
        'key2' => ''
    );

    public function &getRefArray($key) {
        return $this->array[$key];
    }
}

$oExample = new Example();

// Not working:
//$oExample->array['key2'] = &$oExample->array('key1');

// Working:
$oExample->array['key2'] = &$oExample->getRefArray('key1');
print_r($oExample->array);

是的,我知道,那不是您想要的。 但是您甚至不需要尝试以下操作:

final class Example {

    public $array = array(
        'key1' => 'Foo',
        'key2' => &$this->getRefArray('key1');
    );

    public function &getRefArray($key) {
        return $this->array[$key];
    }
}

PHP只是不允许在类中使用。 不管它是否是静态的。

干得好:

class UserTypes {
    const TYPE_ADMINISTRATOR = 1;
    const TYPE_CALL_CENTER_OP = 2;
    const TYPE_SALES_LEADER = 3;
    const TYPE_SALES_OP = 4;

    const TYPE_LOCALE_DEFAULT = 'default';
    const TYPE_LOCALE_ES = 'es';
    const TYPE_LOCALE_DE = 'de';

    private static $TYPE_LOCALE_ES = array(
            TYPE_ADMINISTRATOR => 'administrador',
            TYPE_CALL_CENTER_OP => 'agente de call center',
            TYPE_SALES_LEADER => 'partner líder',
            TYPE_SALES_OP => 'partner operador',
            );

    private static $TYPE_LOCALE_DE = array(
            TYPE_ADMINISTRATOR => 'Administrator',
            TYPE_CALL_CENTER_OP => 'Callcenter Agent',
            TYPE_SALES_LEADER => 'Partner Vertriebsleiter',
            TYPE_SALES_OP => 'Partner Vertriebsmitarbeiter',
            );

    /* Won't work because it's in a static class:
    private static $TYPE_LOCALES = array(
            TYPE_LOCALE_DEFAULT => self::$TYPE_LOCALE_ES,
            TYPE_LOCALE_ES =>  self::$TYPE_LOCALE_ES,
            TYPE_LOCALE_DE =>  self::$TYPE_LOCALE_DE
        );
    */

    /* Won't work because it's in a static class:
    private static $TYPE_LOCALES = self::getLocalesArray();
    */

    public static function getLocalesArray() {
        return array(
            TYPE_LOCALE_DEFAULT => self::$TYPE_LOCALE_ES,
            TYPE_LOCALE_ES =>  self::$TYPE_LOCALE_ES,
            TYPE_LOCALE_DE =>  self::$TYPE_LOCALE_DE
        );
    }


}

print_r(UserTypes::getLocalesArray());

结果:

Array
(
    [TYPE_LOCALE_DEFAULT] => Array
        (
            [TYPE_ADMINISTRATOR] => administrador
            [TYPE_CALL_CENTER_OP] => agente de call center
            [TYPE_SALES_LEADER] => partner líder
            [TYPE_SALES_OP] => partner operador
        )

    [TYPE_LOCALE_ES] => Array
        (
            [TYPE_ADMINISTRATOR] => administrador
            [TYPE_CALL_CENTER_OP] => agente de call center
            [TYPE_SALES_LEADER] => partner líder
            [TYPE_SALES_OP] => partner operador
        )

    [TYPE_LOCALE_DE] => Array
        (
            [TYPE_ADMINISTRATOR] => Administrator
            [TYPE_CALL_CENTER_OP] => Callcenter Agent
            [TYPE_SALES_LEADER] => Partner Vertriebsleiter
            [TYPE_SALES_OP] => Partner Vertriebsmitarbeiter
        )

)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM