我想传递一个函数数组的索引值 - 例如['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中,因此必须使用该函数。我只是希望该函数采用字符串而不是数组。
答案 0 :(得分: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);
答案 1 :(得分:5)
function arraything ($arrayOfIndexes) {
$current = $this->array;
foreach ($arrayOfIndexes as $curIndex) {
$current = $current[$curIndex];
}
return $current;
}
$x = arraything (array(0, 'client_thing'));
没有验证(例如缺少密钥),但这个想法应该是明确的。
答案 2 :(得分:1)
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);
希望它有所帮助: - )
:Nirav
答案 3 :(得分:0)
$first = arraything(0);
echo $first['client_name'];
听起来你正试图过度重视这个论点。是否可以重写以更整洁的方式进行此操作?你可以直接退回......
$this->arraytolookat[0]['client_name'];
某些框架有一个helper function来访问具有.
等运算符的数组成员(当然是在一个字符串中)。
答案 4 :(得分:0)
尝试了foreach循环,我不确定它是否是最佳解决方案。这样的事情
foreach($array as $key => $value){
arraything ($key);
}
或使用array_keys()
功能