Yii2 关联数组
Yii2 associative array
我有一个查询,我正在从中获取一个数组。
$mData = \Yii::$app->db->createCommand("SELECT s.slab_start, s.slab_end, s.rate, r.cust_id
FROM mdc_tariff_slabs s
INNER JOIN mdc_meter_cust_rel r ON s.t_id = r.tariff_id
WHERE r.cust_id = $consumer_no")->queryAll();
通过 var_dump($mData)
我得到了
array(3) { [0]=> array(3) { ["slab_start"]=> string(1) "1" ["slab_end"]=> string(3) "100" ["rate"]=> string(2) "10" } [1]=> array(3) { ["slab_start"]=> string(3) "101" ["slab_end"]=> string(3) "150" ["rate"]=> string(2) "12" } [2]=> array(3) { ["slab_start"]=> string(3) "151" ["slab_end"]=> NULL ["rate"]=> string(2) "14" } }
实际上我想把上面的数组变成下面这样
[100 => 10, 150 => 12, PHP_INT_MAX => 14];
上面100
是第一个slab_end
,10
是那个值的比率。 150
是第二个 slab_end
和 rate
。最后一个 slab_end 将始终是 empty/NULL,所以在这种情况下,我将放置 PHP_INT_MAX
。将有 N
个 slab_end 和比率。
更新 1 个 MDC Table 型号
class MdcTariffSlabs extends \yii\db\ActiveRecord
{
/**
* {@inheritdoc}
*/
public static function tableName()
{
return 'mdc_tariff_slabs';
}
/**
* {@inheritdoc}
*/
public function rules()
{
return [
[['slab_name', 'slab_start', 'rate'], 'required'],
[['slab_start', 'slab_end', 't_id'], 'integer'],
[['slab_name', 'rate'], 'string', 'max' => 50],
[['t_id'], 'exist', 'skipOnError' => true, 'targetClass' => MdcTariff::className(), 'targetAttribute' => ['t_id' => 'id']],
];
}
/**
* {@inheritdoc}
*/
public function attributeLabels()
{
return [
'id' => 'Primary Key',
'slab_name' => 'Slab Name',
'slab_start' => 'Start',
'slab_end' => 'End',
'rate' => 'Rate',
't_id' => 'Tariff ID',
];
}
/**
* Gets query for [[T]].
*
* @return \yii\db\ActiveQuery
*/
public function getT()
{
return $this->hasOne(MdcTariff::className(), ['id' => 't_id']);
}
}
你可以这样做:
$data = MdcTariffSlabs::find()
->joinWith(['t'])
->where('T_TABLE_NAME.cust_id' => $consumer_no)
->all();
//然后映射你的数据
$array = ArrayHelper::map($data, 'slab_end', 'rate');
//输出应该是这样的
[100 => 10, 150 => 12, ...];
我有一个查询,我正在从中获取一个数组。
$mData = \Yii::$app->db->createCommand("SELECT s.slab_start, s.slab_end, s.rate, r.cust_id
FROM mdc_tariff_slabs s
INNER JOIN mdc_meter_cust_rel r ON s.t_id = r.tariff_id
WHERE r.cust_id = $consumer_no")->queryAll();
通过 var_dump($mData)
我得到了
array(3) { [0]=> array(3) { ["slab_start"]=> string(1) "1" ["slab_end"]=> string(3) "100" ["rate"]=> string(2) "10" } [1]=> array(3) { ["slab_start"]=> string(3) "101" ["slab_end"]=> string(3) "150" ["rate"]=> string(2) "12" } [2]=> array(3) { ["slab_start"]=> string(3) "151" ["slab_end"]=> NULL ["rate"]=> string(2) "14" } }
实际上我想把上面的数组变成下面这样
[100 => 10, 150 => 12, PHP_INT_MAX => 14];
上面100
是第一个slab_end
,10
是那个值的比率。 150
是第二个 slab_end
和 rate
。最后一个 slab_end 将始终是 empty/NULL,所以在这种情况下,我将放置 PHP_INT_MAX
。将有 N
个 slab_end 和比率。
更新 1 个 MDC Table 型号
class MdcTariffSlabs extends \yii\db\ActiveRecord
{
/**
* {@inheritdoc}
*/
public static function tableName()
{
return 'mdc_tariff_slabs';
}
/**
* {@inheritdoc}
*/
public function rules()
{
return [
[['slab_name', 'slab_start', 'rate'], 'required'],
[['slab_start', 'slab_end', 't_id'], 'integer'],
[['slab_name', 'rate'], 'string', 'max' => 50],
[['t_id'], 'exist', 'skipOnError' => true, 'targetClass' => MdcTariff::className(), 'targetAttribute' => ['t_id' => 'id']],
];
}
/**
* {@inheritdoc}
*/
public function attributeLabels()
{
return [
'id' => 'Primary Key',
'slab_name' => 'Slab Name',
'slab_start' => 'Start',
'slab_end' => 'End',
'rate' => 'Rate',
't_id' => 'Tariff ID',
];
}
/**
* Gets query for [[T]].
*
* @return \yii\db\ActiveQuery
*/
public function getT()
{
return $this->hasOne(MdcTariff::className(), ['id' => 't_id']);
}
}
你可以这样做:
$data = MdcTariffSlabs::find()
->joinWith(['t'])
->where('T_TABLE_NAME.cust_id' => $consumer_no)
->all();
//然后映射你的数据
$array = ArrayHelper::map($data, 'slab_end', 'rate');
//输出应该是这样的
[100 => 10, 150 => 12, ...];