首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将分隔字符串的数组分解为两个数组。

将分隔字符串的数组分解为两个数组。
EN

Stack Overflow用户
提问于 2012-05-23 05:52:15
回答 6查看 2K关注 0票数 1

我有以下数组:

代码语言:javascript
运行
复制
Array
    (
        [0] => 10-7
        [1] => 11-3
        [2] => 11-7
        [3] => 12-3
        [4] => 12-7
        [5] => 13-3
        [6] => 13-7
        [7] => 14-3
        [8] => 14-7
        [9] => 15-7
    )

我需要使用"-"作为分隔符将其拆分为两个数组:

代码语言:javascript
运行
复制
Array
    (
        [0] => 10
        [1] => 11
        [2] => 11
        [3] => 12
        [4] => 12
        [5] => 13
        [6] => 13
        [7] => 14
        [8] => 14
        [9] => 15
    )

代码语言:javascript
运行
复制
Array
    (
        [0] => 7
        [1] => 3
        [2] => 7
        [3] => 3
        [4] => 7
        [5] => 3
        [6] => 7
        [7] => 3
        [8] => 7
        [9] => 7
    )

有什么像array_explode这样的东西能做我想做的吗?或者是php array函数的组合?我想这样做,如果可能的话,不需要经历我自己的for/each循环,或者至少在已经存在(伪)内置的东西的情况下,尽量减少重新发明轮子的需要。我已经用for循环做过了。但我无法摆脱这样一种感觉,那就是有一种更优雅的方式,可以巧妙地使用数组函数或其他类似的东西。非常感谢,伙计们。

更多信息:

不确定这是否重要,但实际上我需要的是产生的两个数组中的唯一值:

代码语言:javascript
运行
复制
Array
    (
        [0] => 10
        [1] => 11
        [2] => 12
        [3] => 13
        [4] => 14
        [5] => 15
    )

代码语言:javascript
运行
复制
Array
    (
        [0] => 7
        [1] => 3
    )

不需要对唯一值进行排序,键可以保留也可以不保留,第一个数组的合法值从023,而第二个17的合法值。但是,除了这些值(02317,甚至是未分隔的杂散字符串或其他我无法控制的数据类型)之外,还有其他的值是可能的,我肯定会把这些值扔掉。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-05-23 06:13:50

您要寻找的神奇子弹是array_reduce(),例如(PHP 5.3+):

代码语言:javascript
运行
复制
list( $left, $right ) = array_reduce( $input,
  function( $memo, $item ) {
    list( $l, $r ) = explode( '-', $item );
    $memo[0][$l] = $memo[1][$r] = true;
    return $memo;
  },
  array( array(), array() )
);

var_dump( array_keys( $left ), array_keys( $right ) );

你可以在这里看到它的作用

对于PHP <5.3,您必须提前声明该函数:

代码语言:javascript
运行
复制
function my_reducer( $memo, $item ) {
  list( $l, $r ) = // ...
  // ... as above ...
}

list( $left, $right ) = array_reduce(
  $input, 'my_reducer',
  array( array(), array() )
);
票数 3
EN

Stack Overflow用户

发布于 2012-05-23 06:08:51

http://codepad.org/TpVUIhM7

代码语言:javascript
运行
复制
<?php
    $array = array('7-10','7-11','5-10');
    foreach($array as $a){list($x[], $y[]) = explode("-", $a);}
    print_r(array_unique($x));
    print_r(array_unique($y));
?>
票数 2
EN

Stack Overflow用户

发布于 2012-05-23 06:05:56

这里是您的解决方案,请尝试实现以下代码。

应该为你工作。

代码语言:javascript
运行
复制
$main_array =   array( 
        '0' => '10-7',
        '1' => '11-3',
        '2' => '11-7',
        '3' => '12-3',
        '4' => '12-7',
        '5' => '13-3',
        '6' => '13-7',
        '7' => '14-3',
        '8' => '14-7',
        '9' => '15-7',
        );

foreach($main_array as $key=>$value)
{
    $arr_value      =   explode('-',$value);
    $arr_temp1[]    =   $arr_value[0];
    $arr_temp2[]    =   $arr_value[1];  
}
$arr_temp1_unique   = array_unique($arr_temp1);
$arr_temp2_unique   = array_unique($arr_temp2);


print "<pre>";
print_r($main_array);
print_r($arr_temp1);
print_r($arr_temp2);

print_r($arr_temp1_unique);
print_r($arr_temp2_unique);
print "</pre>";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10714188

复制
相关文章

相似问题

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