首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果某些项满足特定条件,则将其移动到数组的末尾。

如果某些项满足特定条件,则将其移动到数组的末尾。
EN

Stack Overflow用户
提问于 2015-02-21 02:44:55
回答 2查看 585关注 0票数 0

我有很多条路要分类.

代码语言:javascript
复制
Array
(
    /something/foo1
    /something/special/foo2
    /something/foo3
    /something/special/foo4
    /something/foo5
    /something/special/foo6
)

..。因此,所有包含/special/的路径都在数组的末尾结束,如下所示:

代码语言:javascript
复制
Array
(
    /something/foo1
    /something/foo3
    /something/foo5
    /something/special/foo2
    /something/special/foo4
    /something/special/foo6
)

路径的原始排序必须保持不变(因此1,2,3,4,5,6 => 1,3,5,2,4,6)。有什么优雅的方法吗?这能用usort函数来实现吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-21 02:49:49

您可以使用unset并附加[],如下所示

代码语言:javascript
复制
$x = array(1,2,3);
$x[] = $x[1];
unset($x[1]);
print_r($x);

Array
(
    [0] => 1
    [2] => 3
    [3] => 2
)

这样,您就可以遍历数组,测试每个元素,并将包含模式的元素翻转到末尾。

代码语言:javascript
复制
$len = count($a);
for ($i=0; $i<$len; $i++) {
    if (...) {
        $a[] = $a[i];
        unset($a[i]);
    }
}

编辑:php的数组同时是列表、散列和数组。可以在保留其索引的同时将元素移到末尾!例如

代码语言:javascript
复制
$a = array(1,2,3);

$t = $a[1];
unset($a[1]);
$a[1] = $t;

print_r($a);
Array
(
    [0] => 1
    [2] => 3
    [1] => 2
)
票数 1
EN

Stack Overflow用户

发布于 2015-02-21 02:54:34

在您的特定示例中,您可以简单地使用asort($array);

但那是假设foo永远是foo。

输出:

代码语言:javascript
复制
array(6) {
  [0]=>
  string(15) "/something/foo1"
  [2]=>
  string(15) "/something/foo3"
  [4]=>
  string(15) "/something/foo5"
  [1]=>
  string(23) "/something/special/foo2"
  [3]=>
  string(23) "/something/special/foo4"
  [5]=>
  string(23) "/something/special/foo6"
}

如果不是这样的话,让我知道,我会做点别的

..。下面是新方法ref注释:

代码语言:javascript
复制
$array  = array(
    '/something/zoo',
    '/something/special/foo',
    '/something/loo',
    '/something/special/goo',
    '/something/boo',
    '/something/special/poo'
);
uasort($array, function($a, $b) {
    $specialInA = strpos($a, '/special/') !== false;
    $specialInB = strpos($b, '/special/') !== false;
    if ($specialInA > $specialInB) {
        return 1;
    }
    if ($specialInB > $specialInA) {
        return -1;
    }
    return $a > $b;
});

输出:

代码语言:javascript
复制
array(6) {
  [4]=>
  string(14) "/something/boo"
  [2]=>
  string(14) "/something/loo"
  [0]=>
  string(14) "/something/zoo"
  [1]=>
  string(22) "/something/special/foo"
  [3]=>
  string(22) "/something/special/goo"
  [5]=>
  string(22) "/something/special/poo"
}

可能会写得更好,但应该有效

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28641491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档