3

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

        $index = client_name;

        function arraything ($index) { return $this->arraytolookat[$index]; }

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

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

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

        Eval(“$this->arraytolookat$index”);

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

编辑:我不知道这个函数可能需要进入多少个级别,因此我不能只在末尾附加一组括号。它并不像看起来那么简单^^

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

4

5 回答 5

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);
于 2011-03-28T11:30:21.420 回答
5
function arraything ($arrayOfIndexes) {
  $current = $this->array;
  foreach ($arrayOfIndexes as $curIndex) {
    $current = $current[$curIndex];
  }
  return $current;
}

$x = arraything (array(0, 'client_thing'));

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

于 2011-03-28T11:29:15.167 回答
2

get_array_value 函数运行良好。所以我也写了一个 set_array_value 函数。

它是这样的:

function get_array_value($array, $indexes)
{
  if (count($indexes) == 1)
  {
    return $array[$indexes[0]];
  }

  $index = array_shift($indexes);
  return get_array_value($array[$index], $indexes);
}

function set_array_value(&$array, $indexes, &$value)
{
  if (count($indexes) == 1)
  {
    return $array[reset($indexes)] = $value;
  }

  $index = array_shift($indexes);
  return set_array_value($array[$index], $indexes, $value);
}

$some_array = array();
$some_array[0]['client_name']['id'] = 1;
$some_array[1]['client_name']['id'] = 2;

$indexes = array(0, 'client_name', 'id');
$value = get_array_value($some_array, $indexes);
print_r($value);

$id = 23;
set_array_value($some_array, $indexes, $id);
$value = get_array_value($some_array, $indexes);
print_r($value);

希望能帮助到你 :-)

:尼拉夫

于 2011-09-06T17:00:48.570 回答
0
$first = arraything(0);

echo $first['client_name'];

听起来您正试图在该论点上过多地重载。可以重写它以更整洁的方式允许它吗?可以直接退货...

$this->arraytolookat[0]['client_name'];

一些框架有一个辅助函数来访问带有操作符的数组成员,例如.(当然是在字符串中)。

于 2011-03-28T11:24:36.383 回答
0

已经尝试过 foreach 循环,我不确定它是否是最好的解决方案。像这样

foreach($array as $key => $value){
   arraything ($key);
}

或使用该array_keys()功能

于 2011-03-28T11:29:08.770 回答