0

mysqlデータベースからフェッチされたクエリに基づいて多次元配列を構築するのに問題があります。目的は、jsonエンコーディングの結果を準備することです。ここで問題が発生しています。

私が目指している構造:

Array ( 
    [68] => Array ( 
        [0] => Array ( 
            [id] => 64 
            [description] => yada, yada, yada... ) 
        [1] => Array ( 
            [id] => 65 
            [description] => yada, yada, yada...) 
        [2] => Array ( 
            [id] => 66 
            [description] => yada, yada, yada... ) ) 
    [69] => Array ( 
        [0] => Array ( 
            [id] => 64 
            [description] => yada, yada, yada... ) 
        [1] => Array ( 
            [id] => 65 
            [description] => yada, yada, yada...) 
        [2] => Array ( 
            [id] => 66 
            [description] => yada, yada, yada... ) ) 
...etc
)

から:

//this is a list of unknown length
$array_ids = (68, 69, 70, etc... );   // or:

Array ( 
    [0] => 68 
    [1] => 69
    [2] => 70 
    [3] => 71 
    etc..  
)


//this is a known length 
$array_contents = ( array ( array ( [id], [description]) );  // or:

Array ( 
    [0] => Array ( 
        [id] => 64 
        [description] =>yada, yada, yada... ) 
    [1] => Array ( 
        [id] => 65 
        [description] => yada, yada, yada... ) 
    [2] => Array ( 
        [id] => 66 
        [description] => yada, yada, yada... ) )

私の試み:

foreach($array_ids as $row){
    $result = array($row=>array());
    foreach($array_contents as $key => $value){
        $result [$row][$key] = $value;
    }
}

結果:

Array ( 
    [68] => Array ( 
        [0] => Array ( 
            [id] => 64 
            [description] => yada, yada, yada... ) 
        [1] => Array ( 
            [id] => 65 
            [description] => yada, yada, yada...) 
        [2] => Array ( 
            [id] => 66 
            [description] => yada, yada, yada... ) ) 

)。

...そしてそれが止まるところです。次の行IDの69、70などには進みません...

私は何が間違っているのですか?

4

4 に答える 4

0

この行が問題のようです:

$result = array($row=>array());

パスを通過するたびに、最後に追加するのではなく、$array_ids完全に消去され$result、から1つのアイテムが再入力されます。$array_contents

これに置き換えるとうまくいくはずです:

$result[$row] = array();

完全に機能するバージョンは次のとおりです。

$array_ids = array(68,69,70);

$array_contents = array(
    array( 
        'id' => 64, 
        'description' => 'yada, yada, yada...'
    ),
  array( 
        'id' => 65,
        'description' => 'yada, yada, yada2...'
    ),
    array( 
    'id' => 66,
    'description' => 'yada, yada, yada3...'
    ),
);

foreach($array_ids as $row){
    $result[$row] = array();
    foreach($array_contents as $key => $value){
        $result [$row][$key] = $value;
    }
}

var_dump($result);
?>

出力は次のとおりです。

array(3) {
  [68]=>
  array(3) {
    [0]=>
    array(2) {
      ["id"]=>
      int(64)
      ["description"]=>
      string(19) "yada, yada, yada..."
    }
    [1]=>
    array(2) {
      ["id"]=>
      int(65)
      ["description"]=>
      string(20) "yada, yada, yada2..."
    }
    [2]=>
    array(2) {
      ["id"]=>
      int(66)
      ["description"]=>
      string(20) "yada, yada, yada3..."
    }
  }
  [69]=>
  array(3) {
    [0]=>
    array(2) {
      ["id"]=>
      int(64)
      ["description"]=>
      string(19) "yada, yada, yada..."
    }
    [1]=>
    array(2) {
      ["id"]=>
      int(65)
      ["description"]=>
      string(20) "yada, yada, yada2..."
    }
    [2]=>
    array(2) {
      ["id"]=>
      int(66)
      ["description"]=>
      string(20) "yada, yada, yada3..."
    }
  }
  [70]=>
  array(3) {
    [0]=>
    array(2) {
      ["id"]=>
      int(64)
      ["description"]=>
      string(19) "yada, yada, yada..."
    }
    [1]=>
    array(2) {
      ["id"]=>
      int(65)
      ["description"]=>
      string(20) "yada, yada, yada2..."
    }
    [2]=>
    array(2) {
      ["id"]=>
      int(66)
      ["description"]=>
      string(20) "yada, yada, yada3..."
    }
  }
}
于 2012-09-20T14:54:15.467 に答える
0

私は次の配列構造とロジックを試してみましたが、私のロジックは少し異なります

$array = array(68,69,70);
$nextArray = array(
    array(
        'id'=>64,
        'desc'=>'test'
    ),
    array(
        'id'=>65,
        'desc'=>'test'
    ),
    array(
        'id'=>66,
        'desc'=>'test'
    ),
    array(
        'id'=>67,
        'desc'=>'test'
    ),
);
$tempArray = array();
foreach($array as $value){
    foreach($nextArray as $key => $value1){
        $tempArray[$value][$key] = $value1;
    }
}
var_dump($tempArray);

出力:

array
  68 => 
    array
      0 => 
        array
          'id' => int 64
          'desc' => string 'test' (length=4)
      1 => 
        array
          'id' => int 65
          'desc' => string 'test' (length=4)
      2 => 
        array
          'id' => int 66
          'desc' => string 'test' (length=4)
      3 => 
        array
          'id' => int 67
          'desc' => string 'test' (length=4)
  69 => 
    array
      0 => 
        array
          'id' => int 64
          'desc' => string 'test' (length=4)
      1 => 
        array
          'id' => int 65
          'desc' => string 'test' (length=4)
      2 => 
        array
          'id' => int 66
          'desc' => string 'test' (length=4)
      3 => 
        array
          'id' => int 67
          'desc' => string 'test' (length=4)
  70 => 
    array
      0 => 
        array
          'id' => int 64
          'desc' => string 'test' (length=4)
      1 => 
        array
          'id' => int 65
          'desc' => string 'test' (length=4)
      2 => 
        array
          'id' => int 66
          'desc' => string 'test' (length=4)
      3 => 
        array
          'id' => int 67
          'desc' => string 'test' (length=4)
于 2012-09-20T14:56:06.073 に答える
0

OK、質問を読み直して、次のことを試してください。

$outputArray = array();

foreach( $array_ids as $id ){
  $outputArray[$id] = $array_contents;
}
于 2012-09-20T14:57:02.243 に答える
0

次の方法でコードを変更してみてください

$result = array();
foreach($array_ids as $row){
    foreach($array_contents as $key => $value){
        $result [$row][$key] = $value;
    }
}
于 2012-09-20T14:57:14.973 に答える