通过关联数组迭代并使用值创建新数组

时间:2014-10-02 22:17:17

标签: php sql arrays

我正在查询关联数组的值,我需要更改它看起来的方式,并添加值'0',其中未返回值(基于$ result的计数)

即。 <=count($result)有4个房间,但只有1个房间和1个房间。返回3,但我仍然需要r_id值2&amp; 4的r_rate值为0.

目前我的数组如下所示:

Array
(
    [0] => Array
        (
            [r_id] => 1
            [r_rate] => 180.00
        )

    [1] => Array
        (
            [r_id] => 3
            [r_rate] => 100.00
        )

)

我希望数组看起来像这样但我无法定义要合并的数组,因为r_id值会有所不同:

Array
(
    [1] => 180.00 // [r_id] => [r_rate]
    [2] => 0
    [3] => 100.00
    [4] => 0
)

我需要将r_id的值作为关键字,r_rate的值作为值,并添加缺少的r_id值(2&amp; 4)值为0.

SQL:

$sql = $dbh->prepare("SELECT booking_room.r_id, room.r_rate FROM booking_room, room 
                    WHERE booking_room.b_id = '$b_id'
                    AND booking_room.r_id = room.r_id
                    ");
$sql->execute();
$result = $sql->fetchAll(PDO::FETCH_ASSOC);

SQL返回:

r_id | r_rate
1    | 180.00
3    | 100.00

到目前为止我已尝试过:

foreach ($result as $v) {
    foreach($v as $r) {
        $r_id[] = $r;
    }
}

$r_id = array_flip($r_id);

foreach ($r_id as $k => $v) {
    $r_id[$k] = $k;
}

1 个答案:

答案 0 :(得分:1)

这样的事情应该可以解决问题。

这将循环遍历$result数组,查找从1开始的数字键,结束于您想要的位置,在示例中为4。如果密钥存在,我们将不管它,如果它不存在,我们将创建它并将其设置为0.

我们最后会运行ksort来按数组键对数组项进行排序。

for ($r = 1; $r <= 4; $i++)
{
    if (!array_key_exists($r, $result))
    {
        $result[$r] = 0;
    }
}

ksort($result);