如何获取多个键的值?

时间:2019-06-12 16:00:49

标签: php arrays

我想使用多个键来获取值。 我有一个适用于单个键的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

谢谢。

2 个答案:

答案 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;});