2013-01-03 55 views
0

我想要的顺序改变:更改阵列顺序(如列)

$array = array(
    "a" => "bar", 
    "b" => "foo", 
    "c" => "bar", 
    "d" => "foo", 
    "e" => "bar", 
    "f" => "foo", 
    "g" => "bar", 
    "h" => "foo", 
    "i" => "bar", 
    "j" => "foo" 
); 

要:

$array = array(
    "a" => "bar", "f"=> "foo", 
    "b" => "foo", "g"=> "bar", 
    "c" => "bar", "h"=> "foo", 
    "d" => "foo", "i"=> "bar", 
    "e" => "bar", "j"=> "foo" 
); 

这样做的一点是,我要填写一个表中的项目阵列:

阵列不应被排序如下:

<table> 
<tr><td>Item 1</td><td>Item 2</td></tr> 
<tr><td>Item 3</td><td>Item 4</td></tr> 
</table> 

但是这样的:

<table> 
<tr><td>Item 1</td><td>Item 3</td></tr> 
<tr><td>Item 2</td><td>Item 4</td></tr> 
</table> 

感谢

+1

如果你想在网页上显示结果,你需要看看'css',因为这样会更适合这份工作。 – jeroen

+0

需要CSS和HTML来输出列。请具体了解更多细节。 –

回答

1

没有必要重新排列原始数组。只需使用array_chunk将它分成两对,并在构建html时循环遍历它们。

$array = array(....); 
$size = ceil(count($array)/2); 
list($left, $right) = array_chunk($array, $size, true); 
echo '<table>'; 
while (count($left) > 0) { 
    echo '<tr>'; 
    echo '<td>', key($left), ': ', array_shift($left), '</td>'; 
    echo '<td>', key($right), ': ', array_shift($right), '</td>'; 
    echo '</tr>'; 
} 
echo '</table>'; 
+0

哦,嘿,我还没有想到。我认为这是最简单的解决方案。谢谢! – user1600804

0

我认为它不会母校是否关键是一个字符串或一个整数。

$array = array(
    4 => 'd', 
    2 => 'b', 
    3 => 'c', 
    6 => 'f', 
    5 => 'e', 
    1 => 'a' 
); 

$x = floor(count($array)/2); 
for($i=1; $i <= $x; $i++) 
{ 
    $array2[ $i ] = $array[ $i ]; 
    $array2[ $i + $x ] = $array[ $i + $x ]; 
} 

将输出:

$Array2 
(
    [1] => a, [4] => d, 
    [2] => b, [5] => e, 
    [3] => c, [6] => f 
) 

JB