【问题标题】:Populate global array with vars from while loop使用 while 循环中的变量填充全局数组
【发布时间】:2023-01-20 19:38:44
【问题描述】:

我的目标:用 while 循环中的值填充一个数组。在将它们添加到数组之前,我想检查它们是否存在。结构应如下所示:

Array
(
    [0] => Array
        (
            [0] => "<p>text</p>"
            [1] => "<p>more</p>"
            [2] => "<p>thing</p>"
        )

    [1] => Array
        (
            [0] => "<p>text</p>"
            [1] => "<p>more</p>"
            [2] => "<p>thing</p>"
        )

)

这像这样工作:

$i = 1;
$content = array();
$output = array();
while ($i <= 2) : 
    $text = '"<p>text</p>"';
    $more = '"<p>more</p>"';
    $some = '"<p>thing</p>"';
    $content[] = [$text, $more, $some];
    $i++;
endwhile;
$output[] = array(
    'content' => $content
);
print_r($content);

但是如果我尝试检查一个值是否存在并将其添加到数组中

$i = 1;
$content = array();
$output = array();
while ($i <= 2) : $i++;
    $text = '"<p>text</p>"';
    $more = '"<p>more</p>"';
    $some = '"<p>thing</p>"';
    if ($text) :
        $content[] = [$text];
    elseif ($more) :
        $content[] = [$more];
    elseif ($some) :
        $content[] = [$some];
    endif;
endwhile;
$output[] = array(
    'content' => $content
);
print_r($content);

我只得到第一个附加值

Array
(
    [0] => Array
        (
            [0] => "<p>text</p>"
        )

    [1] => Array
        (
            [0] => "<p>text</p>"
        )

)

【问题讨论】:

  • 改变否则只是如果
  • $text 已设置,因此无需执行 elseifs。当您在之前的行中明确定义它们时,为什么还要进行检查?
  • 你在这里是什么意思,检查它们是否存在? if ($text) 对于您显示的代码将始终为真,因为您之前分配了 $text = '"&lt;p&gt;text&lt;/p&gt;"';,并且该值是真实的。

标签: php arrays while-loop


【解决方案1】:

尝试使用以下代码将所有值添加到数组:

$i = 1;
$content = array();
$output = array();
while ($i <= 2) : 
    $text = '"<p>text</p>"';
    $more = '"<p>more</p>"';
    $some = '"<p>thing</p>"';
    $content[] = [$text, $more, $some];
    $i++;
endwhile;
$output[] = array(
    'content' => $content
);
print_r($content);

如果您仍然想在添加值之前检查该值是否存在,您可以使用 empty() 函数来检查变量是否为空。

$i = 1;
$content = array();
$output = array();
while ($i <= 2) : 
    $text = '"<p>text</p>"';
    $more = '"<p>more</p>"';
    $some = '"<p>thing</p>"';
    if(!empty($text)) $content[] = $text;
    if(!empty($more)) $content[] = $more;
    if(!empty($some)) $content[] = $some;
    $i++;
endwhile;
$output[] = array(
    'content' => $content
);
print_r($content);

请注意,上面的示例并未将值添加到嵌套数组,而只是将它们添加到一维数组。 如果要将值添加到嵌套数组,可以使用 [] 运算符在现有数组中创建一个新数组

$i = 1;
$content = array();
$output = array();
while ($i <= 2) : 
    $text = '"<p>text</p>"';
    $more = '"<p>more</p>"';
    $some = '"<p>thing</p>"';
    $inner_content = array();
    if(!empty($text)) $inner_content[] = $text;
    if(!empty($more)) $inner_content[] = $more;
    if(!empty($some)) $inner_content[] = $some;
    $content[] = $inner_content;
    $i++;
endwhile;
$output[] = array(
    'content' => $content
);
print_r($content);

【讨论】:

    【解决方案2】:

    在第二个示例中,您仅将第一个值 $text 添加到 $content 数组,因为 if 语句仅检查 $text 是否为真,而不检查 $more 或 $some 是否为真。要检查所有三个变量是否为真并将它们添加到 $content 数组,您可以使用 array_filter() 函数删除任何空值或假值,然后使用 array_push() 函数将剩余值添加到 @ 987654328@数组:

    $i = 1;
    $content = array();
    $output = array();
    while ($i <= 2) :
        $text = '"<p>text</p>"';
        $more = '"<p>more</p>"';
        $some = '"<p>thing</p>"';
        $values = array_filter(array($text, $more, $some));
        array_push($content, $values);
        $i++;
    endwhile;
    $output[] = array(
        'content' => $content
    );
    print_r($content);
    

    输出:

    Array
    (
        [0] => Array
            (
                [0] => "<p>text</p>"
                [1] => "<p>more</p>"
                [2] => "<p>thing</p>"
            )
    
        [1] => Array
            (
                [0] => "<p>text</p>"
                [1] => "<p>more</p>"
                [2] => "<p>thing</p>"
            )
    
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-30
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-15
      • 2019-11-07
      相关资源
      最近更新 更多