如果您需要对除第一个或最后一个元素之外的每个元素执行某些操作,并且仅当数组中有多个元素时,我更喜欢以下解决方案。
我知道上面有很多解决方案,并且比我早几个月/一年发布,但我觉得这本身就相当优雅。检查每个循环也是一个布尔检查,而不是数字“i =(count-1)”检查,这可能会减少开销。
循环的结构可能会让人觉得别扭,但你可以将其与 HTML 表格标签中的 thead(开始)、tfoot(结束)、tbody(当前)的顺序进行比较。
$first = true;
foreach($array as $key => $value) {
if ($first) {
$first = false;
// Do what you want to do before the first element
echo "List of key, value pairs:\n";
} else {
// Do what you want to do at the end of every element
// except the last, assuming the list has more than one element
echo "\n";
}
// Do what you want to do for the current element
echo $key . ' => ' . $value;
}
例如,在 Web 开发术语中,如果您想为无序列表 (ul) 中除最后一个元素之外的每个元素添加一个边框底部,那么您可以为除第一个元素之外的每个元素添加一个边框顶部(CSS: IE7+ 和 Firefox/Webkit 支持的 first-child 支持此逻辑,而 IE7 不支持 :last-child)。
您也可以随意为每个嵌套循环重用 $first 变量,并且一切都会正常工作,因为在第一次迭代的第一个过程中每个循环都会使 $first 错误(因此中断/异常不会导致问题) .
$first = true;
foreach($array as $key => $subArray) {
if ($first) {
$string = "List of key => value array pairs:\n";
$first = false;
} else {
echo "\n";
}
$string .= $key . '=>(';
$first = true;
foreach($subArray as $key => $value) {
if ($first) {
$first = false;
} else {
$string .= ', ';
}
$string .= $key . '=>' . $value;
}
$string .= ')';
}
echo $string;
示例输出:
List of key => value array pairs:
key1=>(v1_key1=>v1_val1, v1_key2=>v1_val2)
key2=>(v2_key1=>v2_val1, v2_key2=>v2_val2, v2_key3=>v2_val3)
key3=>(v3_key1=>v3_val1)