在数组中查找某些元素具有多个维度的值

时间:2015-05-20 11:32:56

标签: php arrays multidimensional-array

我有一个可以包含多维元素的数组。为了在编辑表单中填充数据库中的复选框,我需要检查此数组中的特定键值对。

数组($ areastools)可能如下所示:

array:9 [▼
 15 => array:2 [▼
      0 => 1
      1 => 4
 16 => 4
 45 => array:2 [▶]
 47 => 4
 50 => array:2 [▶]
 51 => 4
]

第一个键是特定区域ID($ area-> pivot-> id),值是工具ID($ tool-> id)。

目前我有这个检查,如果

,则选中复选框
(array_key_exists($area->pivot->id, $areastools) && 
($areastools[$area->pivot->id] == $tool->id))

这适用于不是多维的数组的所有元素。然后在编辑表单中检查正确的复选框。

但是当两个工具添加到同一区域时,将检查这些工具的复选框,因为如果某个区域有很多工具,条件不会检查值是否正确。

我一直在寻找和尝试,但无法找到如何做到这一点。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:0)

我做了一点功能。不是很优雅,但它有效。

function areaTools($areaTools, $areaId, $toolId) {
    if(array_key_exists($areaId, $areaTools) {
        if(is_array($areaTools[$areaId]) {
            foreach($areaTools[$areaId] as $tool) {
                if($tool == $toolId;) {
                    return true;
                }
            }
        } else {
            return $areaTools[$areaId] == $toolId;
        }
    }
}

答案 1 :(得分:0)

如果您只想知道是否找到某个键​​值对,请使用array_walk_recursive()

CGFloat newY = currentTouchPosition.y - positionOnTouchStartDragging.y + (draggedPageIndex - carousel.scrollOffset) * spacing * carousel.bounds.size.height;
CGFloat delta = self.bounds.size.height * spacing;
CATransform3D result = [carousel transformForItemViewWithOffset:newY / deltaY];