所以说我有一个看起来像这样的数组:
$format = [
"client" => ["date" => "j F, Y", "time" => "g:i A"],
"server" => ["date" => "Y-m-d", "time" => "G:i:s"]
];
给定"client"
或"server"
的字符串,如何选择不等于给定字符串的索引?
IE:如果给定"client"
,我想检索"server"
索引。该数组将始终只包含那两个主键(client
和server
)。
我知道这可以在if:
中轻松完成if($string == "client"){
return $format['server'];
}
但我想知道是否有办法在没有附加if语句的情况下进行内联。
我正在尝试用这个做点什么:
$oldFormat = $format[provided string][$type];
$newFormat = $format[NOT provided string][$type];
答案 0 :(得分:1)
除了常数之外,我只能想到:
$logic = [
'client' => 'client',
'not client' => 'server',
'server' => 'server',
'not server' => 'client'
];
$oldFormat = $format[$logic['client']][$type];
$newFormat = $format[$logic['not client']][$type];
常量是:
define('client', 'client');
define('not_client', 'server');
define('server', 'server');
define('not_server', 'client');
$oldFormat = $format[client][$type];
$newFormat = $format[not_client][$type];
答案 1 :(得分:0)
创建额外的转换数组是一种可能的解决方案:
$string = "server";
$type = "date";
$convert["client"] = "server";
$convert["server"] = "client";
echo $format[$convert[$string]][$type]; // gives you the date-format of the client
如果有意义的话,无论如何都不是。
答案 2 :(得分:0)
如果你正在播放代码golf,那么ternary operator是一个合适的单行,一目了然仍然可读 ...想想下一个可怜的草皮必须自己维护你的代码!
$newFormat = $format['client'==$string ? 'server' : 'client'];
答案 3 :(得分:0)
为了好玩,我可以添加另一个解决方案:
$format[current(array_diff(array_keys($format), array($input)))]