2015-09-02 80 views
2

我正在研究wordpress中的一些插件,並且我在函數中使用了下面的數組和foreach循環。PHP從foreach循環獲取函數中的變量

問題是,當$ locale_key變量在函數內部時,總是得到$ locale_key變量與$ code相同。

請幫忙。

$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; 
     } 
    }); 
} 
+1

那麼你的預期產出是什麼? – aldrin27

+0

我的期望輸出是來自數組的$語言[$ key] [1],但我總是得到$語言[$ key] [0] – Antonio

+0

你能告訴我們你需要什麼作爲輸出嗎? –

回答

0
<?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"; 
} 
?> 

試着像上面,我確定你會找到解決方案。

+0

這段代碼給了我和我一樣的結果。 我認爲這個問題是在功能的某個地方,而不是循環。 – Antonio

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($數組作爲$密鑰=> $值)可以訪問通過$密鑰和通過$值中的對應值的索引(即使是一個數組太)。

+0

foreach($語言爲$ key => $ value){ $ locale_key = $ value] [1]; $ code = $ value [0]; echo $ 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

+0

@Antonio我認爲你的鉤子/回調函數有問題。但遺憾的是我沒有使用Wordpress,所以我不能給你一個解決方案。我可以推薦你的唯一的東西是閱讀[文檔](https://codex.wordpress.org/Function_Reference/add_shortcode),但我認爲你已經做到了。 – TobiasJ

+0

這裏是回調函數: 'function add_shortcode($ tag,$ func){ global $ shortcode_tags; $ shortcode_tags [$ tag] = $ func; }' – Antonio