2012-12-11 79 views
-1

我无法洗牌我的阵列,希望有人能指导我?重新排序我的阵列

我有此数组:(此数组是从随机关联函数生成)

Array 
(
    [1] => Array 
     (
      [boo] => hello 
      [yeah] => world 
     )  
) 

我使用这个洗牌助理功能:

function shuffle_assoc($list) { 
    if (!is_array($list)) return $list; 

    $keys = array_keys($list); 
    shuffle($keys); 
    $random = array(); 
    foreach ($keys as $key) { 
    $random[] = $list[$key]; 
    } 
    return $random; 
} 

$test = shuffle_assoc($array); 

echo "<pre>"; 
print_r($test); 
echo "</pre>"; 

然后我得到这个:

Array 
(
    [0] => Array 
     (
      [boo] => hello // I'm trying to switch 
      [yeah] => world // these two values 
     )  
) 

洗牌功能不转换[boo][yeah]

有人可以帮我吗?

+0

@Kafuka对不起,我使用的PHP 。你在问什么? – hellomello

回答

0

您需要跳过数组的第一级。

$array = array(1 => array('boo' => 'hello', 'yeah' => 'world', 'foo' => 'bar')); 
function shuffle_assoc($list) { 
    foreach ($list as $idx => &$sub_array) { // we actually loop over the numeric indexes since that's the first level 
     $keys = array_keys($sub_array); 
     $vals = array_values($sub_array); 
     shuffle($vals); 
     $sub_array = array_combine($keys, $vals); 
    } 
    return $list; 
} 
$new_arr = shuffle_assoc($array); 
var_export($new_arr); 

输出

array (
    1 => 
    array (
    'boo' => 'bar', 
    'yeah' => 'hello', 
    'foo' => 'world', 
), 
) 
0

看起来你传入的数组实际上是数组的数组,与1个元素。您应该在$array[1]上调用此方法。

另外,在shuffle_assoc中,语句$random[] = $list[$key]不保留键值,所以结果数组只包含原始数组的值。将该行代码更改为$random[$key] = $list[$key]应修复此功能。以下是一些适用于我的代码。

<?php 
$array = array("boo" => "hello", "yeah" => "world"); 
function shuffle_assoc($list) { 
    if (!is_array($list)) return $list; 

    $keys = array_keys($list); 
    shuffle($keys); 
    $random = array(); 
    foreach ($keys as $key) { 
    $random[$key] = $list[$key]; 
    } 
    return $random; 
} 

$test = shuffle_assoc($array); 

print_r($test); 
?> 
0

我找到了解决方案。

$ test = shuffle_assoc(array_shift($ array));

array_shift()带来的第一个元素,因此会从

Array 
(
    [1] => Array 
     (
      [boo] => hello 
      [yeah] => world 
     )  
) 

Array 
(
      [boo] => hello 
      [yeah] => world 
) 

注意如何[1]现在已经没有了