【问题标题】:foreach loop returning 2 values from arrayforeach 循环从数组中返回 2 个值
【发布时间】:2014-12-19 02:02:46
【问题描述】:

我在一个函数中有一个 for each 循环,我也传递了一个办公区域 (101,102),它应该循环遍历数组以获取匹配 OfficeRegion 的 OLevel (Red,Amber,Yellow) 中的值并返回一个值.

我遇到的问题是只有数组中的第一行返回一个值并且它总是返回“#red#red”,我怎样才能阻止它返回 2 个值并使其循环遍历整个数组?

数组:

array(115) { 
    [0]=> object(stdClass)#93 (2) { ["OfficeRegion"]=> string(3) "101" ["OLevel"]=> string(1) "R" } 
    [1]=> object(stdClass)#94 (2) { ["OfficeRegion"]=> string(3) "102" ["OLevel"]=> string(1) "R" } 
    [2]=> object(stdClass)#95 (2) { ["OfficeRegion"]=> string(3) "103" ["OLevel"]=> string(1) "R" } 
    [3]=> object(stdClass)#96 (2) { ["OfficeRegion"]=> string(3) "201" ["OLevel"]=> string(1) "R" } 
    [4]=> object(stdClass)#97 (2) { ["OfficeRegion"]=> string(3) "202" ["OLevel"]=> string(1) "R" }
    [5]=> object(stdClass)#98 (2) { ["OfficeRegion"]=> string(3) "301" ["OLevel"]=> string(1) "R" } 
    [6]=> object(stdClass)#99 (2) { ["OfficeRegion"]=> string(3) "302" ["OLevel"]=> string(1) "R" } 
    [7]=> object(stdClass)#100 (2) { ["OfficeRegion"]=> string(3) "401" ["OLevel"]=> string(1) "R" } 
    [8]=> object(stdClass)#101 (2) { ["OfficeRegion"]=> string(3) "403" ["OLevel"]=> string(1) "R" } 
}

每个人:

foreach($sqlarray as $index => $columns) {
    foreach($columns as $key => $value) {
        if ($key == 'OfficeRegion' && $value == $OfficeRegion) {
            if($columns->OLevel == "R") {
                return '#red'; 
            } elseif ($columns->OLevel == "O")  {
                return '#amber'; 
            } elseif ($columns->OLevel == "Y")  {
                return '#yellow';
            } else {
                return '#green';
            }
        } elseif ($key == 'OfficeRegion' && $value != $OfficeRegion) {
            return "#green";
        }
    }
}

欢迎提出任何建议!谢谢

【问题讨论】:

  • 首先,您不需要foreach。你是如何调用函数的?
  • 真的吗?像这样调用函数:GenerateKML::GetColour('101')
  • 为什么是foreach,为什么是嵌套循环?您所做的就是在外部数组中找到具有OfficeRegion 键/属性的第一个元素,然后返回。您没有处理整个数组
  • 1. 获取结果集。 2. 循环遍历结果集(将结果显示到屏幕上)。 3. 通过传入结果集的当前子数组来调用GetColour4.修改GetColour开启OfficeRegion -> OLevel的内容

标签: php arrays laravel foreach


【解决方案1】:

如果$OfficeRegion 是数组,你应该使用这样的代码,这里不需要内循环:

foreach($sqlarray as $index => $columns) {

    if (in_array($columns->OfficeRegion, $OfficeRegion)) {

        switch ($columns->OLevel) {
            case 'R':
                echo '#red';
            case 'O':
                echo '#amber';
            case 'Y':
                echo '#yellow';
            default:
                echo '#green';
        }
    } else {
        echo '#green';    
    }
}

我还在这里将return 更改为echo,以便根据您的需要循环所有项目。

【讨论】:

  • 谢谢,我知道那会更好,我改变了 in_array,因为它抱怨第二个值不是数组。现在的问题是它总是返回最后一个 else 并回显 '#green'
猜你喜欢
  • 2023-03-10
  • 2018-10-08
  • 2013-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多