[英]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.