我想使用多个键来获取值。 我有一个适用于单个键的php代码,但我想获取多个键的值。我该怎么办?
<?php
$arr=array(
'1'=>'India',
'2'=>'Canada',
'3'=>'United',
'4'=>'China',
'5'=>'London',
'6'=>'New Delhi',
);
$key1='4';
$key2='3';
$key3='4';
echo $arr[$key1, $key2, $key3];
?>
我希望以正确的顺序输出这样的内容
China
United
China
谢谢。
答案 0 :(得分:3)
我们在PHP中具有ArrayAccess接口: https://www.php.net/manual/en/class.arrayaccess.php
因此我们可以编写以下代码来支持多个键(从上一页的示例更新了): 您将不得不对其进行更新以满足您的要求。
<?php
class MultipleKeyArray implements ArrayAccess {
private $container = array();
private $separator = ',';
public function __construct($arr ) {
$this->container = $arr;
}
public function setSeparator($str){
$this->separator = $str;
}
public function offsetSet($offsets, $values) {
$os = explode(',',$offsets);
$vs = explode(',',$values);
$max = max(count($os),count($vs));
for($i=0;$i<$max;$i++){
$offset = $os[$i];
$value = $vs[$i];
if (is_null($offset)) {
$this->container[] = $value;
} else {
$this->container[$offset] = $value;
}
}
}
public function offsetExists($offsets) {
$os = explode(',',$offsets);
for($i=0;$i<count($os);$i++){
$offset = $os[$i];
if( !isset($this->container[$offset]) ){
return false;
}
}
return true;
}
public function offsetUnset($offsets) {
$os = explode(',',$offsets);
for($i=0;$i<count($os);$i++){
$offset = $os[$i];
unset($this->container[$offset]);
}
}
public function offsetGet($offsets) {
$os = explode(',',$offsets);
$result = '';
for($i=0;$i<count($os);$i++){
$offset = $os[$i];
$result .= ($i>0 ? $this->separator:'') . (isset($this->container[$offset]) ? $this->container[$offset] : '');
}
return $result;
}
}
$arr=array(
'1'=>'India',
'2'=>'Canada',
'3'=>'United',
'4'=>'China',
'5'=>'London',
'6'=>'New Delhi',
);
$o = new MultipleKeyArray($arr);
$o[] = 'new0';
$o['f,g']='new1,new2';
var_dump(isset($o['f,g']));
var_dump(isset($o['1,2,f']));
var_dump(isset($o['f,not,there']));
echo $o['4,3,4']."\n";
echo $o['2,f,g']."\n";
$o->setSeparator("|");
echo $o['4,3,4']."\n";
输出:
bool(true)
bool(true)
bool(false)
China,United,China
Canada,new1,new2
China|United|China
答案 1 :(得分:1)
PHP索引不能使用数组-您应该使用循环或PHP数组函数来做到这一点。
首先将您需要的键定义为:
$keys = [$key1, $key2, $key3];
现在使用foreach
循环将它们回显为:
foreach($keys as $k)
echo $arr[$k] . PHP_EOL;
还有一线:
array_walk($keys, function($k) use ($arr) {echo $arr[$k] . PHP_EOL;});