【问题标题】:Pull out values from multidimensional associative array从多维关联数组中提取值
【发布时间】:2016-04-23 23:54:44
【问题描述】:

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

这是数组:

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',我需要深入了解。

数组总是让我在 PHP 中为我的钱奔波不知道如何循环遍历它:(

谢谢

【问题讨论】:

  • @PaulCrovella 我有,相信我,我不是新手开发人员,但数组是我一直遇到的问题。我已经阅读了手册并且我有一些代码,但它没有给出我想要的信息。

标签: php arrays multidimensional-array associative-array


【解决方案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
)

【讨论】:

  • 我更新了我目前所拥有的。我基本上没有像我想要的那样深入到阵列中。感谢您的帮助,还没有尝试过您上面的代码,但我确定我在上面添加的内容几乎就在那里?
  • 你需要做echo $value['display']; 因为$value 是你要找的数组。
  • 在我的示例中,它不是回显该值,而是将所有 display 值保存到一维数组中。
  • 同样在我的例子中,如果你想回应它们,你可以使用implode(),比如echo '<div>'.implode('</div><div>',$display).'</div>';
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2014-06-07
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    相关资源
    最近更新 更多