我觉得我错过了一些简单的事情。我需要根据函数的结果更改多维数组中键的值。这是我的数组$ 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键是空的。我已测试并知道函数返回正确的值。
答案 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);
});