【问题标题】:PHP i can't figure out how to find the array key of current parent array?PHP我不知道如何找到当前父数组的数组键?
【发布时间】:2014-01-17 22:58:42
【问题描述】:

我有一个同事。多维数组和一个函数:

// 输入:

$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']);

【问题讨论】:

  • 您将内部数组发送给示例中的函数,因此函数无法知道它接收到的数组是更大数组、对象等的一部分。它只是一个数组。
  • 您将这个键的值包含在函数中,而不是键名
  • 你想要你已经传递给函数的密钥?! :o

标签: php arrays multidimensional-array array-key


【解决方案1】:

继续收到超快的 cmets,我想我有 2 种可能的解决方案...

(注意:这就是为什么它被称为 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;

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 这是解决此问题的最佳 achems razor 方式!谢谢!
    【解决方案3】:

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

    【讨论】:

    • 所以我必须将数组重组为类似的东西?... $users=array( 'michael' => array( 'name' => 'michael', 'age' => '28', '身高' => '5\'9"', ) );
    • @MichaelHurley,正确
    猜你喜欢
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 2013-05-27
    • 2011-01-31
    • 1970-01-01
    • 2014-02-01
    • 2011-01-04
    • 1970-01-01
    相关资源
    最近更新 更多