从多维关联数组中提取值

时间:2016-04-23 23:54:45

标签: php arrays multidimensional-array associative-array

我有一个多维数组,我试图提取某个键的所有值并将其赋值给变量。

这是数组:

Array
(
   [I_would_not_know_the_name_of_this_key] => Array
       (
           [interval] => 3600
           [display] => Once Hourly
       )
   [nor_this_one] => Array
       (
           [interval] => 43200
           [display] => Twice Daily
       )
   [nor_this_one] => Array
       (
           [interval] => 86400
           [display] => Once Daily
       )
) 

即使我不知道上限值是什么,我也总是得到[display]值。

包含上面数组的函数,可以添加更多的日程表,这就是为什么我说我不会总是知道顶级键:https://codex.wordpress.org/Function_Reference/wp_get_schedules

到目前为止我的代码:

          $active_cron_schedules = wp_get_schedules(); //this is the 
          foreach ($active_cron_schedules as $key => $value) {
            echo $key;
          }

          ?>

此输出例如:' I_would_not_know_the_name_of_this_key' nor_this_one',' nor_this_one',我需要深入了解。

Arrays总是让我在PHP中赚钱,但是无法弄清楚如何循环使用它:(

谢谢

2 个答案:

答案 0 :(得分:1)

我认为你要做的事情将通过foreach()循环或array_column()来解决,具体取决于你的php版本。变量部分很难回答,因为您没有举例说明您将对变量进行的操作。一个常见的错误是在循环中覆盖变量,但如果你想要的只是display值(或任何其他键),请尝试:

function getValByKey($array, $getKey = 'display')
    {
        $new    =    array();
        foreach($array as $arr) {
            if(empty($arr[$getKey]))
                continue;

            $new[]    =    $arr[$getKey];
        }

        return $new;
    }

$result    =    array(
                    'key1'=> array('interval'=>1,'display'=>'1d'),
                    'key2'=> array('interval'=>2,'display'=>'2d'),
                    'key3'=> array('interval'=>3,'display'=>'3d')
                );
// To use
$display    =    getValByKey($result);
print_r($display);

// Array column has the same basic function, but
// Only available in PHP 5 >= 5.5.0, PHP 7
$display    =    array_column($result,'display');

print_r($display);

两者都给你:

Array
(
    [0] => 1d
    [1] => 2d
    [2] => 3d
)

答案 1 :(得分:0)

无论什么是关键,你甚至不需要在foreach中知道它。

这是一个样本。 $ key可以是任何东西。你只需要检查它的间隔子元素。

$interval_list = array();
foreach ($array as $key => $el) {
    if (isset($el['interval'])) {
        $interval_list[] = $el['interval'];
    }
}