现在我将其中一个函数传递给如下数组
$inputs = array("FOOD" => "Pancake");
然后在我的函数中,我做了如下操作
foreach ($inputs as $label => $data)
{
echo ($label . $data);
}
以上只是我刚刚写的一个例子,我希望它是正确的。不管怎样,有foreach循环的函数还包含以下内容
$this->SetFillColor(190,205,44);
现在对于每个循环,我还想设置输出的填充颜色。所以我想做一些像下面这样的事情,而不是
$inputs = array("FOOD" => array("Pancake", '190,205,44'));
如果我对传递函数的数组进行var_dump,我看到
array:1 [▼
"FOOD" => array:2 [▼
0 => "PANCAKE"
1 => "190,205,44"
]
]
所以这些看起来都是正确的。现在在我的函数中,我输入
foreach($inputs as $label => $data){
foreach($data as $content => $colour) {
$this->SetFillColor($colour);
$this->Cell(65, 7, $label, 0, 0, 'L', 1, 0);
$this->Cell(100, 7, $content, 0, 0, 'L', 1, 0);
}
}
现在我有几个问题。首先,它似乎输出两行。第一个细胞像它应该做的那样打印出FOOD,但第二个细胞打印出0(应该是PANCAKE)。第二行再次输出FOOD,但第二个单元格输出1。
那么我怎样才能让它只打印第一行呢?另一个问题是$ color,因为这是一个字符串,而我认为它需要是int。
欢迎指教。
谢谢
试试这个:
<?php
foreach($inputs as $label => $data){
$this->Cell(65, 7, $label, 0, 0, 'L', 1, 0);
// content is on index 0
$this->Cell(100, 7, $data[0], 0, 0, 'L', 1, 0);
// color on index 1
$this->SetFillColor($data[1]);
}
或者最好创建一个像这样的stdClass对象:
<?php
$foo[0]['food'] = new stdClass;
$foo[0]['food']->content= 'Pancake';
$foo[0]['food']->color = '190,205,44';
$foo[1]['food'] = new stdClass;
$foo[1]['food']->content= 'Apple';
$foo[1]['food']->color = '255,0,0';
for($i=0,$cnt=count($foo);$i<$cnt;$i++) {
foreach($foo[$i] as $label => $data) {
$this->Cell(65, 7, $label, 0, 0, 'L', 1, 0);
$this->Cell(100, 7, $data->content, 0, 0, 'L', 1, 0);
$this->SetFillColor($data->color);
}
}
编辑:你也可以这样做:
<?php
$foo[0]['food']->color = new stdClass;
$foo[0]['food']->content= 'Pancake';
$foo[0]['food']->color->r = 190;
$foo[0]['food']->color->g = 205;
$foo[0]['food']->color->b = 44;
…(剪)
$c = $data->color;
$this->SetFillColor($c->r,$c->g,$c->b);
或者更有OOP风格
<?php
class color {
private $r;
private $g;
private $b;
public function get_r() {
return (float) $this->r;
}
public function get_g() {
return (float) $this->g;
}
public function get_b() {
return (float) $this->b;
}
public function set_r($r) {
$this->r = $r;
return $this;
}
public function set_g($g) {
$this->g = $g;
return $this;
}
public function set_b($b) {
$this->b = $b;
return $this;
}
static public function factory() {
return new color;
}
public function __construct() {
}
}
class food {
private $content;
private $color;
public function get_content() {
return $this->content;
}
public function get_color() {
return $this->color;
}
public function set_content($content) {
$this->content = $content;
return $this;
}
public function set_color(color $color) {
$this->color = $color;
return $this;
}
static public function factory() {
return new food;
}
public function __construct() {
}
}
$color = color::factory()->set_r(255)->set_g(0)->set_b(0);
$dataarray[] = food::factory()->set_content('Apple')->set_color($color);
foreach($dataarray as $food) {
echo $food->get_content();
echo $food->get_color()->get_r();
echo $food->get_color()->get_g();
echo $food->get_color()->get_b();
}
我想你是想写
$inputs = array("FOOD" => array("Pancake" => '190,205,44'));
使得'Pancake'
是一个以颜色字符串作为其值的键。否则,你应该这样调整你的代码:
foreach($inputs as $label => $data){
$content = $data[0];
$color = $data[1];
$this->SetFillColor($colour);
$this->Cell(65, 7, $label, 0, 0, 'L', 1, 0);
$this->Cell(100, 7, $content, 0, 0, 'L', 1, 0);
}
两种方法都可以。
目前$inputs = array("FOOD" => array("Pancake", '190,205,44'));
只是将$inputs
的'FOOD'
条目设置为包含具有0,1
键的数组,因此您的$content
变量将迭代0,1
,而$color
迭代'PANCAKE','190,205,44'
的值。