2017-04-18 4 views
0

codeigniterのsqlの返す行から多次元配列を作る方法。 $ resのすべての値を保持しているモデルから値を返しますか?mysqlから多次元配列を作る方法codeigniterを使って行を返す

これは私のモデルコードです。

function get_room_book_join($data) { 
    $this->db->join('room_overviews', 'rooms.room_id = 
    room_overviews.rom_id', 'left'); 
    $q = $this->db->get_where('rooms', $data); 
    return $q->result_array(); 
    } 

私はこのタイプの配列を取得しています。このタイプは私を助けません。

Array(
    [0] => Array(
     [room_id] => 1 
     [room_no] => 101 
     [room_desc] => Double Bed Deluxe Non Air Conditioned 
     [status] => available 
     [category_id] => 1 
     [hotel_id] => 1 
     [tariff_type] => normal 
     [room_rate] => 1000 
     [persons] => 0 
     [date_start] => 0000-00-00 
     [date_end] => 0000-00-00 
     [overview_id] => 1 
     [rom_id] => 1 
     [hot_id] => 1 
     [cus_id] => 2 
     [bok_id] => 2 
     [dates] => 2017-04-12 
    ) 
    [1] => Array 
    (
     [room_id] => 1 
     [room_no] => 101 
     [room_desc] => Double Bed Deluxe Non Air Conditioned 
     [status] => available 
     [category_id] => 1 
     [hotel_id] => 1 
     [tariff_type] => normal 
     [room_rate] => 1000 
     [persons] => 0 
     [date_start] => 0000-00-00 
     [date_end] => 0000-00-00 
     [overview_id] => 2 
     [rom_id] => 1 
     [hot_id] => 1 
     [cus_id] => 2 
     [bok_id] => 2 
     [dates] => 2017-04-13 
    ) 
    [2] => Array 
    (
     [room_id] => 1 
     [room_no] => 101 
     [room_desc] => Double Bed Deluxe Non Air Conditioned 
     [status] => available 
     [category_id] => 1 
     [hotel_id] => 1 
     [tariff_type] => normal 
     [room_rate] => 1000 
     [persons] => 0 
     [date_start] => 0000-00-00 
     [date_end] => 0000-00-00 
     [overview_id] => 3 
     [rom_id] => 1 
     [hot_id] => 1 
     [cus_id] => 2 
     [bok_id] => 2 
     [dates] => 2017-04-14 
    ) 
    [3] => Array 
    (
     [room_id] => 1 
     [room_no] => 101 
     [room_desc] => Double Bed Deluxe Non Air Conditioned 
     [status] => available 
     [category_id] => 1 
     [hotel_id] => 1 
     [tariff_type] => normal 
     [room_rate] => 1000 
     [persons] => 0 
     [date_start] => 0000-00-00 
     [date_end] => 0000-00-00 
     [overview_id] => 4 
     [rom_id] => 1 
     [hot_id] => 1 
     [cus_id] => 2 
     [bok_id] => 2 
     [dates] => 2017-04-15 
    ) 
    [4] => Array 
    (
     [room_id] => 2 
     [room_no] => 102 
     [room_desc] => Double Bed Deluxe Non Air Conditioned Room 
     [status] => available 
     [category_id] => 1 
     [hotel_id] => 1 
     [tariff_type] => normal 
     [room_rate] => 1000 
     [persons] => 2 
     [date_start] => 0000-00-00 
     [date_end] => 0000-00-00 
     [overview_id] => 5 
     [rom_id] => 2 
     [hot_id] => 1 
     [cus_id] => 2 
     [bok_id] => 2 
     [dates] => 2017-04-12 
    ) 
    [5] => Array 
    (
     [room_id] => 2 
     [room_no] => 102 
     [room_desc] => Double Bed Deluxe Non Air Conditioned Room 
     [status] => available 
     [category_id] => 1 
     [hotel_id] => 1 
     [tariff_type] => normal 
     [room_rate] => 1000 
     [persons] => 2 
     [date_start] => 0000-00-00 
     [date_end] => 0000-00-00 
     [overview_id] => 6 
     [rom_id] => 2 
     [hot_id] => 1 
     [cus_id] => 2 
     [bok_id] => 2 
     [dates] => 2017-04-13 
    ) 
    [6] => Array 
    (
     [room_id] => 2 
     [room_no] => 102 
     [room_desc] => Double Bed Deluxe Non Air Conditioned Room 
     [status] => available 
     [category_id] => 1 
     [hotel_id] => 1 
     [tariff_type] => normal 
     [room_rate] => 1000 
     [persons] => 2 
     [date_start] => 0000-00-00 
     [date_end] => 0000-00-00 
     [overview_id] => 7 
     [rom_id] => 2 
     [hot_id] => 1 
     [cus_id] => 2 
     [bok_id] => 2 
     [dates] => 2017-04-14 
    ) 
    [7] => Array 
    (
     [room_id] => 2 
     [room_no] => 102 
     [room_desc] => Double Bed Deluxe Non Air Conditioned Room 
     [status] => available 
     [category_id] => 1 
     [hotel_id] => 1 
     [tariff_type] => normal 
     [room_rate] => 1000 
     [persons] => 2 
     [date_start] => 0000-00-00 
     [date_end] => 0000-00-00 
     [overview_id] => 8 
     [rom_id] => 2 
     [hot_id] => 1 
     [cus_id] => 2 
     [bok_id] => 2 
     [dates] => 2017-04-15 
    ) 
) 

実際にこのタイプの配列が必要です。どうすればそれを作ることができますか? ['room_id']と['rom_id']の両方が等しい場合、[dates]がすべての日付を単一配列[dates]に保持すると、多次元配列が作成されます。

array(
[0]=>array(
    [room_id]=>1 
    [dates]=>array(
    [0]=>2014-04-12 
    [1]=>2014-04-13 
    [2]=>2014-04-14 
    [3]=>2014-04-15 
) 
) 
[1]=>array(
[room_id]=>2 
[dates]=>array(
    [0]=>2014-04-12 
    [1]=>2014-04-13 
    [2]=>2014-04-14 
    [3]=>2014-04-15 
))) 
+0

モデルコードに表示できますか? –

+0

ちょっと待ってください。 – user8

+0

が完了しました。 – user8

答えて

1

通常のPHPループを使用するこのサンプルの例を確認してください。あまり効率的ではありませんが、それはあなたの仕事をします。

$dbResponse[] = array(
     'room_id' => 1, 
     'room_no' => 1, 
     'dates' => '2017-04-12', 
    ); 
$dbResponse[] = array(
     'room_id' => 1, 
     'room_no' => 1, 
     'dates' => '2017-04-13', 
    ); 
$dbResponse[] = array(
     'room_id' => 2, 
     'room_no' => 1, 
     'dates' => '2017-04-14', 
    ); 
$dbResponse[] = array(
     'room_id' => 2, 
     'room_no' => 1, 
     'dates' => '2017-04-15', 
    ); 

$updatedList = array(); 
foreach ($dbResponse as $key => $value) { 
    $updatedList[$value['room_id']][]=$value['dates']; 
} 

echo '<pre>'; 
print_r($updatedList); 
echo '</pre>'; 

$finalList = array(); 
foreach ($updatedList as $key => $value) { 
    $finalList[] = array(
      'room_id' => $key, 
      'dates' => $value 
     ); 
} 

echo '<pre>'; 
print_r($finalList); 
echo '</pre>'; 
+0

ありがとうございました...それは私のために働いています。 – user8

1

更新回答

mi6crazyheart良い答え@。私は少し変化を提案したい。このコードを使用してタスクを実行することができます。インデックス付きのキーをroom_idに置き換えても問題ありません。

$dbResponse[] = array(
     'room_id' => 1, 
     'room_no' => 1, 
     'dates' => '2017-04-12', 
    ); 
$dbResponse[] = array(
     'room_id' => 1, 
     'room_no' => 1, 
     'dates' => '2017-04-13', 
    ); 
$dbResponse[] = array(
     'room_id' => 2, 
     'room_no' => 1, 
     'dates' => '2017-04-14', 
    ); 
$dbResponse[] = array(
     'room_id' => 2, 
     'room_no' => 1, 
     'dates' => '2017-04-15', 
    ); 

$updatedList = array(); 
foreach ($dbResponse as $key => $value) { 
    $updatedList[$value['room_id']]['room_id']=$value['room_id']; 
    $updatedList[$value['room_id']]['dates'][]=$value['dates']; 
} 

echo '<pre>'; 
print_r($updatedList); 
echo '</pre>'; 

旧回答

あなたはあなたの問題を解決するために、このコードを使用することができます。

結果の配列を少し変更しましたが、この形式の結果がより役立つと思います(キーからルームIDを取得できます)。

$result = array() 
foreach ($res as $row) { 
    if($row['room_id'] === $row['rom_id']) 
     $result[$res['room_id']]['dates'][] = $row['dates']; 
} 

これ以上ヘルプが必要な場合は、お手伝いします。

ハッピーコーディング!

+0

ええ、それはコードから1つのループを削除するので、パフォーマンスの観点からも優れています。私はちょうどOPの要件を念頭に置いてそれを作った。 – mi6crazyheart

+0

@ mi6crazyheartありがとう男..あなたのコードは私にその考えを与えた:) –

関連する問題