PHP多维数组与整型



现在我将其中一个函数传递给如下数组

$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'的值。

相关内容

  • 没有找到相关文章

最新更新