我有一个可以包含多维元素的数组。为了在编辑表单中从数据库填充复选框,我需要检查来自该数组的特定键值对。
数组($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))
此操作适用于数组中所有非多维元素。然后在编辑表单中选中正确的复选框。
但是当两个工具被添加到同一区域时,这些工具的复选框都不被选中,因为如果一个区域有许多工具,条件不会检查值是否正确。
我一直在寻找和尝试,但无法找到如何做到这一点。有人能帮帮我吗?
我将创建一个小函数。不是很优雅,但它可以工作。
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;
}
}
}
如果您只想知道是否找到了某个键值对,则使用array_walk_recursive()
$found=0;
function find_key_value($v, $k)
{
global $area,$tool,$found;
if (($k==$area->pivot->id)&&($v==$tool->id))
$found=1;
}
array_walk_recursive($areastools, 'find_key_value');