在PHP 5中动态获取数组元素?

时间:2012-03-30 10:26:05

标签: php arrays

我有一个包含一些数组的数组($ configOptions)。该数组中的每个数组($ option)都具有以下结构:

array
  'manufacturer1_sender' => string 'general' (length=7)
  'manufacturer1_mail' => string 'acer@example.com' (length=16)
  'manufacturer1_template' => string       
  'orderhandling_options_manufacturer1' (length=58)
  'manufacturer1_name' => string 'Acer' (length=4)

唯一改变的是 manufacturer1_name 中的数字。数量可以是2,3,4等等。现在我有了这段代码:

foreach($configOptions as $option) {
    $name = ??????????;        
}

$ option是我上面转储的数组,如何在foreach中访问manufacturerN_name?

谢谢!

2 个答案:

答案 0 :(得分:2)

有几种方法:

1 - 检索子数组中的所有键并根据正则表达式检查每个键,将结果捕获到数组中,然后将其用作索引:

$keys=array_keys($option); //Retrieve all keys
$name='';
foreach ($keys as $key)    //Loop
{
    if (preg_match('/^(manufacturer\d+_name)$/'),$key))
    {
        $name=$key; // We've got a match!
    }
}

2 - 如果manufacturerN_name始终是数组中的最后一个元素,请使用

$throwaway=end($option); //Retrieve last item in array
$name=key($option)       //Get index of current position

或一些类似的构造

答案 1 :(得分:0)

您可以通过第一个密钥(manufacturer???_...)中的sscanf­Docs获取该号码,然后使用sprintf­Docs格式化名称密钥:

foreach ($configOptions as $option) {
    list($refkey) = each($option);
    $number = sscanf($refkey, 'manufacturer%d_');
    if (NULL === $number) {
        throw new Exception('Could not find number in key "%s" or option %s.', $refkey, print_r($option, true));
    }
    $name = sprintf('manufacturer%d_name', $number);
}