【问题标题】:How to add to array then output items?如何添加到数组然后输出项目?
【发布时间】:2017-04-10 23:02:46
【问题描述】:

我有一堆用户,每个用户都有一个描述,我想将这些描述添加到一个数组中。然后我想读取数组,拆分每个描述,并将结果设置为变量。示例描述为:

italian, mexicanfrench, american

这就是我目前正在做的事情:

<?php
    $stack = array();
    $blogusers = get_users( 'orderby=nicename&role=author' );
    foreach ( $blogusers as $user ) {
        array_push($stack, $user->user_description );
    }
    $out = array_map('trim', explode(',', $stack));
?>

那我做

<ul>
    <li><?php echo $out[0]; ?></li> 
    <li><?php echo $out[1]; ?></li> 
    <li><?php echo $out[2]; ?></li> 
    <li><?php echo $out[3]; ?></li> 
</ul>

但我得到一个没有结果值的列表

更新

试过

$stack = array();
$blogusers = get_users( 'orderby=nicename&role=author' );
foreach ( $blogusers as $user ) {
    $users = array_map('trim', explode(',', $user->user_description) );
    array_push($stack, $users);
}

然后

<li><?php echo $stack[0]; ?></li> 
<li><?php echo $stack[1]; ?></li> 
<li><?php echo $stack[2]; ?></li>

【问题讨论】:

  • 为什么要炸掉$stack?我认为您需要分解 user_description。
  • 因为我想修剪和分解描述中的每个单词,因为它们是意大利文、美国文......
  • @jh1711 试过 $stack = array(); $blogusers = get_users('orderby=nicename&role=author'); foreach ( $blogusers as $user ) { $users = array_map('trim', explode(',', $user->user_description) ); array_push($users, $stack); } 然后回显 $stack[0];
  • array_push 的顺序错误,请参阅:php.net/manual/en/function.array-push.php

标签: php arrays string explode


【解决方案1】:

只需分解每个描述,然后将分解返回的每个元素推送到数组中。这是假设您不关心重复。

$stack = array();
$blogusers = get_users( 'orderby=nicename&role=author' );
foreach ( $blogusers as $user ) {
    $descTokens = explode(',', $user->user_description);
    $stack = array_merge($stack, $descTokens);
}

<li><?php echo $stack[0]; ?></li> 
<li><?php echo $stack[1]; ?></li> 
<li><?php echo $stack[2]; ?></li>

【讨论】:

  • 你可以只使用array_merge() 而不是循环。
  • 不,我在数组中有重复值实际上很好,因为我正在做所有这些以创建统计信息。实际上有没有办法我们可以获得相同值的总数?喜欢2意大利语?
  • @miken32 你是对的,更新了答案。这更干净。我的印象是array_merge 会重复数据删除,但看起来只有键值才会出现这种情况。谢谢!
【解决方案2】:

如果您在循环完成后查看$stack,您将获得与此等价的内容:

<?php
$stack = [
    "italian, mexican",
    "french, american",
    "canadian, irish",
];

如果你通过explode 运行它,你不会得到任何东西,因为你传递给它一个数组。事实上,如果您设置了正确的错误报告,您会收到有关传递数组而不是字符串的警告。我想你想要做的是:

<?php
    $blogusers = get_users( 'orderby=nicename&role=author' );
    foreach ( $blogusers as $user ) {
        $out[] = $user->user_description;
    }
?>
<li><?=$out[0]?></li> 
<li><?=$out[1]?></li> 
<li><?=$out[2]?></li>
...

如果你在单独的变量中确实需要这个,你可以explode()它,但你不能将数组输出到页面:

<?php
    $blogusers = get_users( 'orderby=nicename&role=author' );
    foreach ( $blogusers as $user ) {
        $out[] = explode(",", $user->user_description);
    }
?>
<li><?=$out[0][0]?></li> 
<li><?=$out[0][1]?></li> 
<li><?=$out[1][0]?></li>
<li><?=$out[1][1]?></li>
...

【讨论】:

  • 这很好,但是我不会将每个描述作为单独的输出,正如问题中所述,每个描述都是“意大利,美国”等等。我需要拆分这些单词中的每一个并能够将它们列为单独的列表
  • 非常感谢,这可行,但接受了另一个答案,因为它更接近我正在做的事情并且更容易处理它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多