在foreach循环中使用无命令回显数组项目

问题描述:

我正在处理一个多维数组,其中将包含可变数目的空对象。我写了一个脚本来简单地取消设置()空的,并且它工作正常。但是,即使没有echo()函数,运行循环时也会打印非空值,而我似乎无法弄清楚原因。在foreach循环中使用无命令回显数组项目

,将通过我的循环使用运行的阵列的一个例子:

Array 
(
[0] => Group Object 
    (
     [_title] => <strong>Abdomen</strong><ul> 
     [_issues] => <li><strong>Ascites</strong>: 1</li><li><strong>Blood Clot</strong>: 2</li> 
    ) 

[1] => Group Object 
    (
     [_title] => <strong>Air Sac</strong><ul> 
     [_issues] => <li><strong>Cloudy</strong>: 1</li> 
    ) 

[2] => Group Object 
    (
     [_title] => <strong>Beak Treatment</strong><ul> 
     [_issues] => <li><strong>Severe</strong>: 3</li> 
    ) 

[3] => Group Object 
    (
     [_title] => 
     [_issues] => 
    ) 

[4] => Group Object 
    (
     [_title] => 
     [_issues] => 
    ) 

[5] => Group Object 
    (
     [_title] => <strong>Crop</strong><ul> 
     [_issues] => <li><strong>Impacted</strong>: 2</li> 
    ) 

[6] => Group Object 
    (
     [_title] => <strong>Feathering</strong><ul> 
     [_issues] => <li><strong>Soiled</strong>: 1</li> 
    ) 

[7] => Group Object 
    (
     [_title] => <strong>Feet</strong><ul> 
     [_issues] => <li><strong>Swollen</strong>: 1</li> 
    ) 

[8] => Group Object 
    (
     [_title] => 
     [_issues] => 
    ) 

[9] => Group Object 
    (
     [_title] => 
     [_issues] => 
    ) 

[10] => Group Object 
    (
     [_title] => <strong>Heart</strong><ul> 
     [_issues] => <li><strong>Compromised</strong>: 1</li> 
    ) 

[11] => Group Object 
    (
     [_title] => <strong>Hock</strong><ul> 
     [_issues] => <li><strong>Clear Exudate</strong>: 2</li> 
    ) 

[12] => Group Object 
    (
     [_title] => 
     [_issues] => 
    ) 

[13] => Group Object 
    (
     [_title] => 
     [_issues] => 
    ) 

[14] => Group Object 
    (
     [_title] => 
     [_issues] => 
    ) 

[15] => Group Object 
    (
     [_title] => <strong>Kidney</strong><ul> 
     [_issues] => <li><strong>Injured</strong>: 2</li> 
    ) 

) 

的foreach()循环该清除出空的对象阵列的内部:

foreach ($issues as $key => $link) { 
      if ($issues[$key] != '') { 
     unset($issues[$key]); 
    } 
    } 

最后,循环运行时打印的输出:

<strong>Abdomen</strong><ul> 
    <li><strong>Ascites</strong>: 1</li> 
    <li><strong>Blood Clot</strong>: 2</li> 
<strong>Air Sac</strong><ul> 
    <li><strong>Cloudy</strong>: 1</li> 
<strong>Beak Treatment</strong><ul> 
    <li><strong>Severe</strong>: 3</li> 
<strong>Crop</strong><ul> 
    <li><strong>Impacted</strong>: 2</li> 
<strong>Feathering</strong><ul> 
    <li><strong>Soiled</strong>: 1</li> 
<strong>Feet</strong><ul> 
    <li><strong>Swollen</strong>: 1</li> 
<strong>Heart</strong><ul> 
    <li><strong>Compromised</strong>: 1</li> 
<strong>Hock</strong><ul> 
    <li><strong>Clear Exudate</strong>: 2</li> 
<strong>Kidney</strong><ul> 
    <li><strong>Injured</strong>: 2</li> 

显然我只想要空的组ps被删除,没有任何要打印的东西。任何帮助表示赞赏。

+2

这意味着,你需要向我们展示更多的代码,根据您提供的代码,这是不可能会有一个输出... – HamZa

至于有人建议here,您可以使用array_filter

class Foo { 

    public $bar; 

    public function __construct($arg) 
    { 
     $this->bar = $arg; 
    } 

    public function isEmpty() 
    { 
     if (is_string($this->bar) && !empty($this->bar)) 
     { 
      return false; 
     } 

     return true; 
    } 

} 

$array = array(
    new Foo(29), 
    new Foo(''), 
    new Foo('hello'), 
    new Foo(null), 
    new Foo('world'), 
); 

function obj_is_empty($obj) 
{ 
    return (! $obj->isEmpty()); 
} 

print "<pre>"; 
var_dump(array_filter($array, "obj_is_empty")); 

做工精细

我可能是错的,但你的阵列应该有引号,项目:

[_title] => "<strong>Abdomen</strong><ul>" 

否则无论未来是不可预知的。

您正在检查数组keys(_title,_issues),而不是values(Abdomem等)。