foreach ($response as $object) {
$basename = basename($object);
$structure = explode("/", $object);
echo $structure[0] . '<br>';
...
}
如果您想防止在 echo'ing out 中出现重复$structure[0]
,您需要检查您是否已经拥有它,例如通过保留历史记录:
$history = array();
foreach ($response as $object) {
$name = strstr($object, "/", true);
if ($name !== false && !isset($history[$name])) {
$history[$name] = 1;
echo $name . '<br>';
}
...
}
您可能想要简化您的代码。我们来复习:
foreach ($response as $object) {
$basename = basename($object);
$structure = explode("/", $object);
echo $structure[0] . '<br>';
}
该线路$basename = basename($object);
未使用。它可以被删除:
foreach ($response as $object) {
$structure = explode("/", $object);
echo $structure[0] . '<br>';
}
然后你只需要字符串的一部分直到第一个"/"
,这个strstr
函数很方便:
foreach ($response as $object) {
$part = strstr($object, "/", true);
FALSE === $part && $part = $object;
echo $part . '<br>';
}
现在我们已经简化了很多,我们可以创建一个简单的映射函数:
$map = function($v) {
$k = strstr($v, "/", true);
FALSE === $k && $k = $v;
return $k;
};
并映射$response
:
$mapped = array_map($map, $response);
然后独一无二:
$unique = array_unique($mapped);
并完成了工作。代码更容易阅读:
$map = function($v) {
$k = strstr($v, "/", true);
FALSE === $k && $k = $v;
return $k;
};
$mapped = array_map($map, $response);
$unique = array_unique($mapped);
foreach ($unique as $name) {
echo $name, "<br>\n";
}
额外的好处就在这里,在您关心输出的那一刻,要输出的数据已经井井有条并且可以正确使用。由于输出本身算作应用程序的一部分,因此不应将其与数据处理混为一谈。请参阅IPO 模型。