PHP - 获取数组索引,其中键不等于"字符串"

时间:2014-08-05 19:18:07

标签: php arrays string-formatting

所以说我有一个看起来像这样的数组:

$format = [
  "client" => ["date" => "j F, Y", "time" => "g:i A"],
  "server" => ["date" => "Y-m-d",  "time" => "G:i:s"]
];

给定"client""server"的字符串,如何选择不等于给定字符串的索引?

IE:如果给定"client",我想检索"server"索引。该数组将始终只包含那两个主键(clientserver)。

我知道这可以在if:

中轻松完成
if($string == "client"){
   return $format['server'];
}

但我想知道是否有办法在没有附加if语句的情况下进行内联。

我正在尝试用这个做点什么:

$oldFormat = $format[provided string][$type];
$newFormat = $format[NOT provided string][$type];

4 个答案:

答案 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)))]