簡體   English   中英

通過查詢創建多維數組

[英]creating a multidimensional array from queries

我很難根據從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等。

我究竟做錯了什么?

這行似乎是問題所在:

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

每次通過$array_ids將完全清除$result ,並用$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..."
    }
  }
}

我嘗試了以下數組結構和邏輯的工作原理,我的邏輯有點不同

$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)

好,重新閱讀問題后,請嘗試以下操作:

$outputArray = array();

foreach( $array_ids as $id ){
  $outputArray[$id] = $array_contents;
}

嘗試按照更短的方式更改代碼

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM