Php 使用explode仅显示返回数组的一个实例

Php 使用explode仅显示返回数组的一个实例,php,explode,Php,Explode,嗨,我正在运行以下代码 foreach ($response as $object) { $basename = basename($object); $structure = explode("/", $object); echo $structure[0] . '<br>'; } 我只希望它返回一个唯一的名称,如下所示 MINOFSOUDUB412 MotionTracker.zip MotionTracker 有人能帮我吗 谢谢将该值用作数组键将获得最佳性能: $

嗨,我正在运行以下代码

foreach ($response as $object) {

$basename = basename($object);

$structure = explode("/", $object);

echo $structure[0] . '<br>';


}
我只希望它返回一个唯一的名称,如下所示

MINOFSOUDUB412
MotionTracker.zip
MotionTracker
有人能帮我吗


谢谢

将该值用作数组键将获得最佳性能:

$unique = array();
while (...) {
    $unique[$name] = true;
}
print_r(array_keys($unique);
一开始这似乎有点疯狂。毕竟,为什么要将字符串用作数组键

好:
$unique[$name]
是O(1)(意味着无论数组有多大,它都需要相同的时间),而在_数组中($name,$unique)是O(n),意味着它随着数组中有多少个条目而增长

仅供参考,代码中的完整版本为:

$unique = array();

foreach ($response as $object) {
    $basename = basename($object);
    $structure = explode("/", $object);
    $unique[$structure[0]] = true;
    //You could also do: $unique[$structure[0]] = $structure[0];
    //Then your second foreach could be:
    //foreach ($unique as $name)
}

foreach ($unique as $name => $fake) { echo $name . '<br>'; }
$unique = array();
foreach ($response as $object) {
    $basename = basename($object);
    $structure = explode("/", $object);
    if (!in_array($structure[0], $unique)) {
        $unique[] = $structure[0];
    }
}

较慢的版本速度较慢,但不熟悉PHP数组的人可能会发现它更容易阅读。

array\u unique
将是正确的选择。只需将分解后的数组传递给此函数,就可以得到所需的内容

您可以在这里查看:

您可能希望以流式方式输出代码。让我们回顾一下:

foreach ($response as $object) {

    $basename = basename($object);

    $structure = explode("/", $object);

    echo $structure[0] . '<br>';


}
然后您只需要字符串的一部分,直到第一个
“/”
strstr
函数非常方便:

foreach ($response as $object) {

    $part = strstr($object, "/", true);
    FALSE === $part && $part = $object;

    echo $part . '<br>';

}
并映射
$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";
}
$map=函数($v){
$k=strstr($v,“/”,真);
FALSE==$k&&$k=$v;
返回$k;
};
$mapped=array\u map($map,$response);
$unique=数组_unique($mapped);
foreach($名称唯一){
echo$name,“
\n”; }

另外一个好处是,在您关心输出的那一刻,要输出的数据已经是有序的,并且可以正常使用。由于输出本身是应用程序的一部分,所以不应该和数据处理混为一谈。请参阅。

@DCHP和我的建议,不是吗?@Eugene-Yours将起作用,但需要构建整个阵列,然后基本上在幕后进行哈希映射。换句话说,这是两种方法的混合。它将占用最多的空间,而且可能是最慢的,然而,它可能最终会得到更干净的代码。@Corbin很好地取决于作者在寻找什么。更少的代码或更高的性能。@Eugene最多会少两行:)@Corbin I仍然会少用。+1在一个循环中完成,并进行适当的检查。。。这应该是公认的答案。@Corbin:这要看情况,首先优化数据或在一次迭代中完成所有工作是有用的。由于使用了数组,通常可以跨多个步骤执行操作,例如使用
array\u map
array\u unique
等。但是,如果使用迭代,则最好在每个迭代中实现它。通常我会说数组函数做得最好,我也会添加一个例子。实际上,在这里,他实现了构建唯一值数组并在一次迭代中输出它们的两个目标。这种方法实际上没有缺点。至于数组函数,我不会在这种情况下使用它们,尽管我认为它们会读得更清楚。是的,对于给出的信息来说,什么更有意义,实际上是无法判断的,但我还是编辑了答案;)
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;
};
$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";
}