我想知道是否有一个更好的解决方案,从中到下,然后从开始到中间循环一个数组。特别是对于关联数组。
例如,如果存在带键的关联数组
$dow = array(Mon => etc, Tue => etc, Wed => etc, Thr => etc .. to .. Sun => etc).
我会从周四开始搜索数组以找到第二天的具体内容,这可能是任何一天但恰好是在周二,我通常从周四(按索引)到周日迭代,然后重置并从周一再次开始周三,到达周二时找到目标。
我通过id计算索引,当它达到6时,将id重置为0
$id = 3 // Found day is Thursday id
//Loop function starts here
$id++; // start search from one day above found day
if ($id >= 6){ //when reaching Sunday
$id = 0 // start search from monday
}
// check array here for that specific thing
所以问题是询问是否有一个比这更简单的解决方案,即从星期四到星期日的分割数组,并将它添加到数组的开头,然后进行循环而不必计算索引或是否有是不使用计数索引的任何其他解决方案。
答案 0 :(得分:0)
您可以尝试使用array_splice:
$array = array(1,2,3,4,5,6,7);
$lastDays = array_splice($array, 3);
$firstDays = $array;
print_r(array('first days' => $firstDays, 'last days' => $lastDays));
如果该日期不在$lastDays
(使用类似$matchFound
的布尔值),那么您将在$firstDays
中搜索。
或者只使用array_merge:
$array = array(1,2,3,4,5,6,7);
$array = array_merge(array_splice($array, 3), $array);
print_r($array);
其中输出为:
Array
(
[0] => 4
[1] => 5
[2] => 6
[3] => 7
[4] => 1
[5] => 2
[6] => 3
)
然后您可以使用foreach
进行搜索。
答案 1 :(得分:0)
也许foreach会更有效率。希望这有帮助。
$id = 3 // Found day is Thursday id
$i =0;
//Loop function starts here
foreach($dow as $idx)
if($id == $i):
else if($i > $id):
endif;
if($i == count($dow)){$i=0;}else{$i++;}
endforeach;
答案 2 :(得分:0)
<?php
$dow = array("mon","tue","wed","thu","fri","sat","sun");
$pick_a_day = 2; // user input; NON zero based. monday = 1
$pick_a_day--; // make it zero based to use in code
foreach($dow as $inc => $an_element )
{
echo $dow[($pick_a_day+(count($dow))) % (count($dow))]." - loop number:".($inc+1)."\n";
$pick_a_day++;
}
?>
输出
tue - loop number:1
wed - loop number:2
thu - loop number:3
fri - loop number:4
sat - loop number:5
sun - loop number:6
mon - loop number:7
答案 3 :(得分:0)
也许不是最好的解决方案,而是解决方案:
function half($array) {
$h = sizeof($array) / 2;
$a1 = array_splice($array, $h);
$a2 = array_splice($array, 0);
$res = array_merge($a1, $a2);
return $res;
}
$dow = array('Mon' => 'etc1', 'Tue' => 'etc2', 'Wed' => 'etc3', 'Thr' => 'etc4', 'Fri' => 'etc5', 'Sat' => 'etc6', 'Sun' => 'etc7');
$b = half($dow);
现在你可以通过foreach,或者你想怎样。 $ b的结果:
Array
(
[Thr] => etc4
[Fri] => etc5
[Sat] => etc6
[Sun] => etc7
[Mon] => etc1
[Tue] => etc2
[Wed] => etc3
)