随机php多维数组并获取原始数组索引

时间:2012-04-27 07:37:38

标签: php multidimensional-array

任何人都可以帮我解决多维数组?我有一个数组,希望在其中包含随机数组,因此它的层次结构或索引值将被更改,并且与原始数组排列不同,例如:

这是原始数组

Array(
    [0]=>Array(
             [title]       => 'Title 1'
             [description] => 'description here'
         )
    [1]=>Array(
             [title]       => 'Title 2'
             [description] => 'another description here'           
         )
    [2]=>Array(
             [title]       => 'Title Here Again'
             [description] => 'description here again'           
         )
)

这将是上面数组的原始结构,如果你随意,请说这将是结果

这是随机数组

 Array(
        [0]=>Array(
                 [title]       => 'Title 2'
                 [description] => 'another description here'
             )
        [1]=>Array(
                 [title]       => 'Title 3'
                 [description] => 'another description again'           
             )
        [2]=>Array(
                 [title]       => 'Title 1'
                 [description] => 'description here'          
             )
    )

正如你所看到的,数组中的值是在不同的位置随机化,现在问题是我无法得到关于如何获得这样的原始数组索引的确切逻辑 - > ([0])来自随机数组。像值'标题1'一样,它的原始索引是[0],在它被随机编辑之后它变成了[2],但我仍然希望'标题1'被分配给索引[0]。这是关于我如何随机化数组的简短PHP代码:

foreach (shuffleThis($rss->getItems()) as $item) {

    foreach($item as $key=>$value){
        if($key=='title'){
                $title=$value;
        }
        if($key=='description'){
            $description=$value;    
        }
    }
}
function shuffleThis($list) { 
  if (!is_array($list)) return $list; 

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

只是想让他们key的原始数组索引被随机编辑。

谢谢!

2 个答案:

答案 0 :(得分:1)

使用字符串作为键和函数'shuffle' 改组示例:http://www.php.net/manual/en/function.shuffle.php#104430

答案 1 :(得分:1)

如果我理解正确,您想要更改元素的顺序,但保留密钥。你可以通过一个小的修改来做到这一点:

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

    $keys = array_keys($list); 
    shuffle($keys); 
    $random = array(); 
    foreach ($keys as $key) { 
        $random[$key] = $list[$key]; // CHANGE HERE that preserves the keys
    }
    return $random; 
}