1

多次元配列について誰かが私を助けることができますか?私はその中にランダムな配列を望んでいた配列を持っているので、その階層またはそこのインデックス値は変更され、次のように配列の元の配置とは異なります。

これは元の配列です

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ランダム化されないように元の配列インデックスを取得したかっただけです。

ありがとう!

4

2 に答える 2

2

私があなたを正しく理解しているなら、あなたは要素の順序を変更したいが、キーは保持したい。あなたは小さな変更でそれを行うことができます:

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; 
}
于 2012-04-27T07:43:18.273 に答える
1

文字列をキーとして使用し、関数「シャッフル」を使用します。
シャッフルの例:http ://www.php.net/manual/en/function.shuffle.php#104430

于 2012-04-27T07:41:01.277 に答える