2012-12-11 3 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 지금은 사라지고 방법

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

공지 사항에

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

에서 갈거야, 그래서

array_shift()

은 첫 번째 요소를 제공합니다 . 네가 묻고있는거야? – 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)); 이 [1]