【问题标题】:PHP get variable in function from foreach loopPHP从foreach循环中获取函数中的变量
【发布时间】:2015-11-27 20:51:57
【问题描述】:

我正在使用 wordpress 中的一些插件,我有以下数组和 foreach 循环,其中包含函数。

问题是,当 $locale_key 变量在函数内部时,我总是得到与 $code 相同的 $locale_key 变量。

请帮忙。

$languages = array(
    array('af', 'af', 'Afrikaans'),
    array('ar', 'ar', 'العربية', 'rtl'),
    array('az', 'az', 'Azərbaycan'),
    array('be', 'bel', 'Беларуская мова'),
    array('bg', 'bg_BG', 'български'),
    array('bs', 'bs_BA', 'Bosanski'),
    array('ca', 'ca', 'Català'),
    array('cs', 'cs_CZ', 'Čeština'));

$lang = $_SESSION['lang'];

foreach ($languages as $key => $value) {
    $locale_key = $languages[$key][1];
    $code = $languages[$key][0];
    echo $locale_key; // Here i get for example "bs_BA"
    add_shortcode( $code, function($atts, $content = null, $locale_key) {
        global $lang;
        echo $locale_key; // And then here i get "bs"
        if ($lang == $locale_key) {
            return $content;
        }
    }); 
}

【问题讨论】:

  • 那么您的预期输出是什么?
  • 我的预期输出是数组中的 $languages[$key][1],但我总是得到 $languages[$key][0]
  • 你能告诉我们你需要什么作为输出吗?
  • 例如,当在 foreach 循环中 $code 为“bs”时,我想将 $locale_key 设置为“bs_BA”,如果我在函数外部回显变量,那么它会起作用,但是当我在函数内部回显变量时,我会得到相同的结果作为 $code 变量。函数($atts, $content = null, $locale_key) { 全局 $lang;回声 $locale_key; });我会得到我需要的 bs,而不是 bs_BA。
  • add_shortcode() 是你创建的函数吗?

标签: php arrays wordpress function foreach


【解决方案1】:

试试:

$languages = array(
    array('af', 'af', 'Afrikaans'),
    array('ar', 'ar', 'العربية', 'rtl'),
    array('az', 'az', 'Azərbaycan'),
    array('be', 'bel', 'Беларуская мова'),
    array('bg', 'bg_BG', 'български'),
    array('bs', 'bs_BA', 'Bosanski'),
    array('ca', 'ca', 'Català'),
    array('cs', 'cs_CZ', 'Čeština'));

$lang = $_SESSION['lang'];

foreach ($languages as $key => $value) {
    $locale_key = $value[1];
    $code       = $value[0];
    add_shortcode( $code, function($atts, $content = null, $locale_key) {
        global $lang;
        if ($lang == $locale_key) {
            return $content;
        }
    }); 
}

当您使用 foreach($array as $key => $value) 时,您可以通过 $key 访问索引并通过 $value 访问相应的值(即使那也是一个数组)。

【讨论】:

  • foreach ($languages as $key => $value) { $locale_key = $value][1]; $code = $value[0];回声 $locale_key; // 这里我得到 "bs_BA" add_shortcode( $code, function($atts, $content = null, $locale_key) { global $lang; echo $locale_key; // 这里我得到 "bs" if ($lang == $ locale_key) { return $content; } }); }
  • @Antonio 我认为你的钩子/回调函数有问题。但遗憾的是我没有使用 Wordpress,所以我不能给你一个解决方案。我唯一可以推荐你的是阅读documentation,但我认为你已经这样做了。
  • 这里是回调函数:function add_shortcode($tag, $func) { global $shortcode_tags; $shortcode_tags[ $tag ] = $func; }
【解决方案2】:
<?php
$array = [
    [1, 2, 3],
    [3, 4, 5],
];

foreach ($array as list($a, $b, $c)) {
    // $a enthält das erste Element des verschachtelten Arrays
    // und $b enthält das zweite Element
    echo "A: $a; B: $b; C: $c\n";
}
?>

试试上面的方法,我相信你会找到解决办法的。

【讨论】:

  • 这段代码给我的结果和我的一样。我认为问题出在函数的某个地方,而不是循环中。
猜你喜欢
  • 1970-01-01
  • 2013-08-12
  • 2014-05-27
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多