将部分代码转换为 PHP 函数

3

这个问题可能很容易解决,但出于某种原因我似乎无法解决它。假设我的代码如下:

$elements = array('a', 'b', 'c', 'd');

$myValues = array(
    'values' => array(
        'a' => array(
            'xx' => 3,
            'yy' => ''
        ),
        'b' => array(
            'xx' => '',
            'yy' => ''
        ),
        'c' => array(
            'xx' => 8.4,
            'yy' => ''
        ),
        'd' => array(
            'xx' => 18.4,
            'yy' => ''
            )
        )
);

foreach($elements as $elem)
{
    if($myValues['values'][$elem]['xx'] != '')
    {
        if($myValues['values'][$elem]['xx'] < 6)
        {
            $myValues['values'][$elem]['yy'] =  'less than 6';
        }
        elseif($myValues['values'][$elem]['xx'] >= 6 && $myValues['values'][$elem]['xx'] < 15)
        {
            $myValues['values'][$elem]['yy'] =  'between 6 and 16';
        }
        else
        {
            $myValues['values'][$elem]['yy'] = 'greater than 15';
        }

            testFunc($myValues['values'][$elem]['xx']); // This is how I would call my function once I replace the code above
    }
}

正如您在这里看到的,我所尝试的是基于某些条件更改$myValues ['values'] [$elem] ['yy']的值。 我想要的是用执行相同操作的函数替换if elseif else代码段。

我尝试了类似以下的代码:

function testFunc($xx)
{
    if($xx < 6)
    {
        $yy = 'less than 6';
    }
    elseif($xx >= 6 && $xx < 15)
    {
        $yy =  'between 6 and 16';
    }
    else
    {
        $yy = 'greater than 15';
    }

    return $yy;
}

但是很明显这不会起作用,因为我没有在函数内部更改$myValues ['values'] [$elem] ['yy']的值。

注意:我只想传递$myValues ['values'] [$elem] ['xx']的值到函数内,并返回更改后的$myValues ['values'] [$elem] ['yy']的值。

有人能帮帮我吗?

提前感谢。


你能展示一下在你的代码中如何使用 testFunc 吗? - Amr Mostafa
3个回答

3

编辑:重新阅读问题,一开始看错了。似乎这里不需要引用。这样行吗?

foreach ($elements as $element) {
    $myValues['values'][$element]['yy'] = testFunc($myValues['values'][$element]['xx']);
}

同样地,如果$elements总是与array_keys($myValues['values'])相同,您可以使用引用:

foreach ($myValues['values'] as &$value) {
    $value['yy'] = testFunc($value['xx']);
}

我的函数接受的是 $myValues['values'][$elem]['xx'],但根据某些条件修改的是 $myValues['values'][$elem]['yy'] - user765368
我知道这很简单(我的大脑很累,我需要休息哈哈)。我在调用函数时忘记将我试图更改的值设置为函数调用的结果。谢谢。 - user765368

0

函数测试()

function testFunc(&$arr) {
  foreach ($arr['values'] as &$values) {
    if ($values['xx'] != '') {
      if ($values['xx'] < 6)
        $values['yy'] = 'less than 6';
      elseif ($values['xx'] >= 6 && $values['xx'] <= 15)
        $values['yy'] = 'between 6 and 15';
      else
        $values['yy'] = 'greater than 15';
      }
    }
  }

使用方法:

testFunc($myValues);
print_r($myValues);

输出:

Array
(
  [values] => Array
    (

      [a] => Array
        (
          [xx] => 3
          [yy] => less than 6
        )

      [b] => Array
        (
          [xx] => 
          [yy] => 
        )

      [c] => Array
        (
          [xx] => 8.4
          [yy] => between 6 and 15
        )

      [d] => Array
        (
          [xx] => 18.4
          [yy] => greater than 15
        )

    )

)

0
foreach($elements as $elem){
    $xx = $myValues['values'][$elem]['xx'];
    if(empty($xx)) continue;
    $myValues['values'][$elem]['yy'] = testFunc($xx);
}

function testFunc($xx){
    if($xx < 6) return 'less than 6';
    return ($xx > 15) ? 'greater than 15' : 'between 6 and 16';
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接