从foreach循环中抓取前三个字符


php Grab first three characters out of a foreach loop

我有这样的代码:

$arr = json_decode($jsondata, TRUE);
$arr2 = $arr['items']['item'];
echo '<ul>';
foreach ($arr2 as $val) {
echo '<li>'.$val[description].'</li>';
}
echo '</ul>';
输出:

  • Ann (24/05/2014 - 23/05/2015)
  • 滞纳金(新增18/05/2014)

我只是想将'Ann'存储在变量$plan中。我似乎无法完成这件事。我该怎么做呢?

我认为你想在第一个"("之前得到所有东西。这并不一定是前3个字符。

function get_everything_before_paren_open($str)
{
    $p = strpos($str, '(');
    if($p === FALSE) {
        return $p;
    } else {
        return rtrim(substr($str, $p-1));
    }
}

那么你可以把你的代码写成

$arr = json_decode($jsondata, TRUE);
$arr2 = $arr['items']['item'];
echo '<ul>';
foreach ($arr2 as $val) {
    $plan = get_everything_before_paren_open($val["description"]);
    echo '<li>'.$plan.'</li>';
    // Position 1
}
echo '</ul>';

这将输出

  • 滞纳金

如果您只想输出"Ann",只需在代码中添加break;而不是// Position 1。然后将"Ann"放入$plan中。

顺便说一下,你应该引用"description"

首先,我要稍微清理一下PHP代码。你不应该在PHP中编写纯HTML。

<?php
$arr = json_decode($jsondata, TRUE);
$arr2 = $arr['items']['item'];
?>
<ul>
    <?php foreach ($arr2 as $val): ?>
    <?php $plan = explode('(', $val[description])[0] ?>
    <li><?php echo $val[description] ?></li>
    <?php endforeach ?>
</ul>

对于explode('(', $val[description])[0]),您可以在(之前获得第一部分。$plan将替换Ann,第一次迭代后替换Late Fee