用函数结果改变多维php数组的值

时间:2014-11-21 15:51:29

标签: php arrays multidimensional-array

我觉得我错过了一些简单的事情。我需要根据函数的结果更改多维数组中键的值。这是我的数组$ exports

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行是我的功能。如果我用字符串替换它,那么我的数组会正确更新,但是使用该函数,我的classyear键是空的。我已测试并知道函数返回正确的值。

4 个答案:

答案 0 :(得分: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);
        }
    }
}

答案 1 :(得分: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;
}

答案 2 :(得分:0)

我还没有测试过这段代码,但array_walk_recursive()似乎是我处理这个问题的方法:

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

array_walk_recursive($exports, 'changeKey');

答案 3 :(得分: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);
});