我正在尝试使用可变数量的“cols”保存对象。 col的数量等于标题的数量。这就是代码之前的样子:
if(isset($_POST['submit'])){
$sub = new Sub();
$sub->product_id = $_POST['product_id'];
$sub->col1 = $_POST['col1'];
$sub->col2 = $_POST['col2'];
$sub->col3 = $_POST['col3'];
$sub->col4 = $_POST['col4'];
$sub->col5 = $_POST['col5'];
$sub->col6 = $_POST['col6'];
$sub->col7 = $_POST['col7'];
$sub->col8 = $_POST['col8'];
$sub->col9 = $_POST['col9'];
$sub->col10 = $_POST['col10'];
$sub->col11 = $_POST['col11'];
$sub->col12 = $_POST['col12'];
$sub->col13 = $_POST['col13'];
$sub->col14 = $_POST['col14'];
$sub->col15 = $_POST['col15'];
这就是我想要的样子:
if(isset($_POST['submit'])){
$sub = new Sub();
$sub->product_id = $_POST['product_id'];
$i = 0;
foreach($headers as $header){
$i++ ;
$sub->col.$i = $_POST['col'.$i];
}
如何将变量$ i传递给对象的属性? $ sub->(col。$ i)? $ sub->(col {$ i})?请帮我解决这个问题=)谢谢
答案 0 :(得分:2)
试试这个:
$sub = new Sub();
$sub->product_id = $_POST['product_id'];
for($i = 1; $i <= count($headers); ++$i)
$sub->{'col' . $i} = $_POST['col' . $i];
但是,这真的不是列应该存储在Sub
对象中的方式,你应该使用数组:
$sub->columns = array();
for($i = 1; $i <= count($headers); ++$i) {
$sub->columns[] = $_POST['col' . $i];
}
答案 1 :(得分:2)
您必须使用{}
:
$sub->{'col' . $i} = ...
答案 2 :(得分:1)
$field = "col$i";
$sub->$field = "whatver"
答案 3 :(得分:0)
我更喜欢setter方法。
class Sub {
public function set($attribute, $value) {
$this->$attribute = $value;
}
}
现在你可以做到:
foreach($_POST as $key => $value) {
$sub->set($key, $value)
}
或没有松耦合:
$i = 1;
while($value = $_POST['col' . $i]) {
$sub->set('col' . $i, $value);
$i++;
}