PHP动态数组索引名称

Jon*_*ard 3 php indexing multidimensional-array dynamic-values

我想传递一个函数数组的索引值 - 例如['client_name'] - 第一级值是有效的,因为我可以做

        $index = client_name;

        function arraything ($index) { return $this->arraytolookat[$index]; }
Run Code Online (Sandbox Code Playgroud)

问题是......如果它是一个多嵌套数组,我该怎么做?

我尝试了eval语句,显然它没有很好地评估括号......所以我尝试了这个.

        $index = “[0][‘client_name’]”;

        Eval(“$this->arraytolookat$index”);
Run Code Online (Sandbox Code Playgroud)

但它只是失败了...关于一个意想不到的[ - 任何想法?

编辑:我不知道这个函数可能需要多少级别,因此我不能在最后附加一定数量的括号.它不像它看起来那么简单^^

编辑2:基本上 - 我已经编写了一个表单验证工具,其中一个函数返回正确的帖子数据 - 我想要一个简单的方法,当你输入表单元素的名称时 - 它会将POST数据返回给元素,例如getFormData("client_name") - 但是当一个表单变得更复杂时,它可以进入数组,我需要为getFormData("['$ i'] client_name")或者这些行的某些东西做准备,该类中的postdata,以便必须使用该函数.我只是希望该函数采用字符串而不是数组.

Imi*_*bas 10

您可以将索引数组传递给下面的此函数.所以,如果你想获得,$some_array[0]['client_name']['third_level_index']那么你可以这样做:

function get_array_value(array $array, array $indexes)
{
    if (count($array) == 0 || count($indexes) == 0) {
        return false;
    }

    $index = array_shift($indexes);
    if(!array_key_exists($index, $array)){
        return false;
    }

    $value = $array[$index];
    if (count($indexes) == 0) {
        return $value;
    }

    if(!is_array($value)) {
        return false;
    }

    return get_array_value($value, $indexes);
}

$some_array = array(/* nested array */);

$indexes = array(0, 'client_name', 'third_level_index');

$value = get_array_value($some_array, $indexes);
Run Code Online (Sandbox Code Playgroud)


Kin*_*nch 5

function arraything ($arrayOfIndexes) {
  $current = $this->array;
  foreach ($arrayOfIndexes as $curIndex) {
    $current = $current[$curIndex];
  }
  return $current;
}

$x = arraything (array(0, 'client_thing'));
Run Code Online (Sandbox Code Playgroud)

没有验证(例如,缺少密钥),但这个想法应该是清楚的.