循环数组中的前向项

时间:2012-03-24 02:38:00

标签: php

我正在努力为我的童子军部队创建一份工作名单,而且我在创造就业机会方面遇到了一些问题。

我有一个包含人们工作的数组。然后我使用一个循环来显示与一个人相关的工作。

我有什么办法可以把工作搬到一边吗?

例如:

Person 1     -     Job 1
Person 2     -     Job 2
Person 3     -     Job 3

然后转到:

Person 1    -      Job 2
Person 2    -      Job 3
Person 3    -      Job 1

然后

Person 1    -      Job 3
Person 2    -      Job 2
Person 3    -      Job 1

但是因为用户可以更改组中的人数(从2到20),如何在不进行硬编码的情况下进行此过程?

4 个答案:

答案 0 :(得分:1)

  • 将第一个元素放入临时变量
  • 通过循环运行数组并将数组的当前元素设置为下一个
  • 将数组的最后一个元素设置为临时变量

答案 1 :(得分:1)

据我所知,你想循环工作,同时保持人员固定。

如果是这种情况,您可以在1循环中执行此操作:

<?php

$persons = array(

'Person 1' =>     'Job 1',
'Person 2' =>     'Job 2' ,
'Person 3' =>     'Job 3' 

);

//Get the 'persons'
$keys = array_keys($persons);

//Get the 'jobs'
$jobs = array_values($persons);

foreach ($i = 0; $i < count($keys); $i++){

    //Remove first value and reinsert it to the end of the array
    $firstValue = array_shift($jobs);
    $jobs[] = $firstValue;

    //Add the keys back to the array
    $result = array_combine($keys, $jobs);
    var_dump($result); //Do whatever you want to the result here.
}

答案 2 :(得分:0)

你有两个不同的阵列???一个人和一个人的工作?如果是这种情况,我将遍历person数组,然后循环遍历作业数组与person数组相同的次数(从0开始并每次递增)。这假设人和工作是平等的。如果你清除我可能有的任何问题,我可以改变我的答案。

For i = 0 to i = person_array.length - 1 
   For j = 0 to j = person_array.length - 1
       int k = j // to show the starting point for the job so first time through job 1, second job 2, etc
       print person_array[i] " - " job_array[k]
       if k = job_array.length then j = 0 // starts at the beginning or the job array
   end for
end for

答案 3 :(得分:0)

<?php

$array = array('one' => '1', 'two' => '2', 'three' => '3', 'four' => '4');

$keys = array_keys($array);
$vals = array_values($array);

$vals[] = array_shift($vals);

$new = array_combine($keys, $vals);

print_r($new);

?>

<强>输出:

Array
(
    [one] => 2
    [two] => 3
    [three] => 4
    [four] => 1
)