2014-11-21 82 views
0

我感覺我缺少一些簡單的東西。我需要根據函數的結果更改多維數組中某個鍵的值。這是我的數組$ exports帶功能結果的多維php數組的改變值

Array ( 
[0] => Array (
    [captain] => Yes 
    [uniform] => 3 
    [fname] => Sally 
    [lname] => Smith 
    [position1] => OH 
    [position2] => 
    [position3] => 
    [bio] => 
    [classyear] => 2015 
    [hft] => 5 
    [hin] => 7 
) 
[1] => Array (
    [captain] => Yes 
    [uniform] => 2 
    [fname] => Danielle 
    [lname] => Smith 
    [position1] => L 
    [position2] => S 
    [position3] => OH 
    [bio] => 
    [classyear] => 2016 
    [hft] => 5 
    [hin] => 2 
) 
[2] => Array (
    [captain] => No 
    [uniform] => 4 
    [fname] => Erica 
    [lname] => Smith 
    [position1] => RS 
    [position2] => 
    [position3] => 
    [bio] => 
    [classyear] => 2018 
    [hft] => 5 
    [hin] => 9 
) 
) 

這是我正在使用的代碼。

foreach($exports as $key => &$value) 
    { 
     foreach($value as $key1 => &$value1) 
     { 
      if($key1 == "classyear") $value1=JHtml::_('helper.gradenumber', $value1, $season); 
     } 
    unset($value1); 
    } 
    unset($value); 

    return $exports; 

這是在Joomla內,所以JHml線是我的功能。如果我用一個字符串替換它,那麼我的數組已正確更新,但使用該函數,我的類年鍵是空的。我已經測試並知道該函數正在返回正確的值。

+0

您在'$ exports'中的預期結果是什麼? – RichardBernards 2014-11-21 15:55:34

+0

我期待我的函數的結果取代classyear鍵的現有值。 – 2014-11-21 16:19:08

回答

0

好像你有什麼應該基本能工作,但在這部分:

$value1=JHtml::_('helper.gradenumber', $value1['classyear'], $season) 

我覺得$value1['classyear']應該僅僅是$value1

因爲if($key1 == "classyear")那麼$value1只是一個數字。另外,如果您首先看到了classyear函數的所有結果,那麼您可能會讓它回顯該值而不是返回該值。

您可以使用array_walk

array_walk($exports, function (&$value) use ($season) { 
    $value['classyear'] = JHtml::_(
     'helper.gradenumber', $value['classyear'], $season); 
}); 
+0

就像我說過的,我知道我錯過了一些簡單的東西,你說得對,gradenumber功能是迴應價值,而不是返回它,它藏在一個幫助文件中,我從來沒有驗證過,感謝您指引我在正確的方向 – 2014-11-21 17:02:42

+0

不客氣! – 2014-11-21 17:05:20

0

您引用了您的$value$value1,然後是unset他們。不要使用而不是引用,更新這樣的值:

foreach ($exports as $key => $value) { 
    foreach ($value as $key1 => $value1) { 
     if ($key1 == "classyear") { 
      $exports[$key1] = JHtml::_('helper.gradenumber', $export['classyear'], $season); 
     } 
    } 
} 
+0

這是我第一次努力。最後一個數組的結果是classyear是空的,數字在數組之前打印。例如,如果classyear函數的結果是12,10,9,如果我在$ exports數組上做print_r,那麼我得到12,10,9數組(0,等等)。 – 2014-11-21 16:11:39

0

可以使用array_key_exists()檢查鑰匙存在與否。無需使用嵌套foreach()。例如:

$finalArray = array(); 
foreach($exports as $key => $value) 
{ 
    if(array_key_exists("classyear", $value)){ 
     $value["classyear"] = JHtml::_('helper.gradenumber', $export['classyear'], $season); 
    } 
    $finalArray[] = $value; 
} 
+0

我得到的結果與使用@ lolka_bolka建議,函數結果打印在數組之前 – 2014-11-21 16:14:47

0

我沒有測試此代碼,但array_walk_recursive()在我看來,是處理這種方式:

function changeKey(&$item, $key) { 
    if($key == 'classyear') { 
     $classYear = $item; 
     $item = JHtml::_('helper.gradenumber', $classYear, $season); 
    } 
} 

array_walk_recursive($exports, 'changeKey'); 
+0

結果相同,item的值放在數組之前,所以12109數組(0等),classyear鍵是空的,如果我設置$ item =爲一個數字,那麼這個數字我在函數中echo'd $ item來驗證函數gradenumber是否返回正確的值 – 2014-11-21 16:44:37