0

我有一个副手。多维数组和一个函数:

// 输入:

$array = array();
$array['keyname0'] = array(
  'key0' => 'value0',
  'key1' => 'value1',
  //etc,
);
$array['keyname1'] = array(
  'key0' => 'value0',
  'key1' => 'value1',
  //etc,
);

// 方法:

function getCurrentParentArrayKey($array){
  //should return current key name of this array
  //I can't for the life of me find any array function on php.net or anywhere that solves this
}

// 执行:

print getCurrentParentArrayKey($array['keyname0']);

// 输出:

keyname0

一个更好的例子可能是:

$users=array(
  'michael' => array(
    'age' => '28',
    'height' => '5\'9"',
  )
);

function getUserName($array){
  //do something
  //@return: 'michael'
}

print getUserName($users['michael']);
4

3 回答 3

1

继续收到超级棒的快速评论,我想我有两种可能的解决方案......

(注意:这就是为什么它被称为 MVC 而不是 VMC 或 CVM 哈哈)

示例 1:

(将父键名称添加到子数组):

$users=array(
  'michael' => array(
    'name' => 'michael', // add the parent arrays key name to the child array @see answer 2
    'age' => '28',
    'height' => '5\'9"',
  )
);

function getUserName($array){
  return $array['name'];
}

print getUserName($users['michael']); // 'michael'

示例 2:

(将整个数组传递给函数并将键名作为参数传递)

$users=array(
  'michael' => array(
    'age' => '28',
    'height' => '5\'9"',
  ),
  'adrienne' => array(
    'age' => '26',
    'height' => '5\'3"',
  )
);

function getName($array,$array_key){
    $keys = array_keys($array);
    $key = array_search($array_key, $keys);
    return $keys[$key];
}

print 'Name: '.getName($users,'michael');

但是,如果您知道键名足以将其提供给函数 getName() 您可以将键名提供给输出...

$keyname = 'michael';
print 'name: '.$keyname;
于 2014-01-18T05:42:52.657 回答
0

我不相信你能够,当你将 $array['keyname0'] 传递给 getCurrentParentArrayKey() 时,你会丢失父数组的上下文,因为它在传入之前被解析为内部数组。

于 2014-01-17T23:02:39.210 回答
0

您可以将父键添加为数组的值:

array(
    'key1' => array(
         'subkey1' => 'value1',
         'subkey2' => 'value2',
         'subkey3' => 'value3',
         'keyinparent' => 'key1'
    ),
    'key2' => array(
         'subkey4' => 'value4',
         'subkey5' => 'value5',
         'subkey6' => 'value6',
         'keyinparent' => 'key2'
    )
)

但是,在将子数组传递给函数之前,它需要进行处理。

于 2014-01-17T23:17:58.463 回答