如何在PHP中动态循环不同的数组?
如果我想在这两个阵列中循环:如何在PHP中动态循环不同的数组?,php,arrays,loops,multidimensional-array,Php,Arrays,Loops,Multidimensional Array,如果我想在这两个阵列中循环: array (size=3) 0 => array (size=1) 'email' => string 'testr@example.com' (length=17) 1 => array (size=1) 'name' => string 'Joe' (length=3) 2 => array (size=1) 'lastName' => strin
array (size=3)
0 =>
array (size=1)
'email' => string 'testr@example.com' (length=17)
1 =>
array (size=1)
'name' => string 'Joe' (length=3)
2 =>
array (size=1)
'lastName' => string 'Doe' (length=3)
及
我显示这两个数组的原因是我试图编写一个函数来处理这两个数组。我了解如何循环第二个数组,正如我在函数中使用的那样:
foreach($inserts as $colName => $colValue)
{
//...
}
但是,这是我正在努力解决的第一个数组,我如何处理通过第一个数组的循环,同时仍然支持通过第二个数组的循环,因为我的函数可以通过我上面展示的两种类型的数组传递
我确实尝试过在第一个数组中使用两个foreach循环,但我想知道是否有一种方法可以只使用一个循环来处理两种类型的数组,以及是否有一种方法可以检测第一种类型的数组,因为如果传入第一种类型的数组,我需要做些什么?请继续使用第二种更简单的情况,并检测您是否跑步 在第一个。如果是这种情况,则转换值。这个 技巧如下:
只需坚持第二种情况,这是更简单的,并检测您是否运行 在第一个。如果是这种情况,则转换值。这个 技巧如下:
是否要对两个阵列使用单个循环?如果可能的话?或者一种在检测到第一个数组时循环的方法?使用回调函数的array\u map或array\u reduce可能会对您有所帮助。您想对两个数组使用单个循环吗?如果可能的话?或者在检测到时循环第一个数组的方法?使用回调函数的array\u map或array\u reduce可能会对您有所帮助值得一提的是,您可能需要一些安全措施,如果你不能保证数组总是有相同的内容格式,你能详细说明一下为什么会有安全问题吗?你的嵌套数组是否保证至少有一个元素?如果没有,则
数组_键
行将导致问题。如果你需要的话就加一张支票,我没有加答案。但是如果您认为值得检查格式,请这样做:)是的,我的数组将始终至少有一个元素,因为我将控制数组结构,只是数据不同。很抱歉打扰您,但如果我是正确的,则“array\u shift(array\u keys($colValue))”基本上从我问题中的第一个数组示例中获取第一个键,然后“array\u shit”从“array\u keys(colValue)”返回的数组中的0弹出?@erds4是的,这正是它所做的。您也可以使用[0]
或使用reset()和key()访问阵列。实现这一点的方法有很多。值得一提的是,如果不能保证数组始终具有相同的内容格式,您可能需要一些安全措施。您能否详细说明一下为什么会出现安全问题?嵌套数组案例是否保证至少有一个元素?如果没有,则数组_键
行将导致问题。如果你需要的话就加一张支票,我没有加答案。但是如果您认为值得检查格式,请这样做:)是的,我的数组将始终至少有一个元素,因为我将控制数组结构,只是数据不同。很抱歉打扰您,但如果我是正确的,则“array\u shift(array\u keys($colValue))”基本上从我问题中的第一个数组示例中获取第一个键,然后“array\u shit”从“array\u keys(colValue)”返回的数组中的0弹出?@erds4是的,这正是它所做的。您也可以使用[0]
或使用reset()和key()访问阵列。实现这一点的方法很多。
foreach($inserts as $colName => $colValue)
{
//...
}
foreach ($inserts as $colName => $colValue) {
if (is_array($colValue)) {
# get first key
$colName = array_shift(array_keys($colValue));
# reassign value
$colValue = $colValue($colName);
}
# proceed as normal ...
}