在不循环PHP的情况下爆炸数组值

时间:2018-04-28 07:38:20

标签: php arrays

有没有办法可以在不迭代每个项目的情况下爆炸大数组的数组值?

例如我有

$Array = [
    'Foo and Bar',
    'Bar and Baz',
    'Baz and Foo'
];

我想要

$Array1 = [
    'Foo',
    'Bar',
    'Baz'
];
$Array2 = [
    'Bar',
    'Baz',
    'Foo'
];

我可以通过简单地执行foreach循环来实现这一点。喜欢这个

foreach ($Array as $Value) {
    $DataEx = explode(' and ', $Value);
    $Array1[] = $DataEx[0];
    $Array2[] = $DataEx[1];
}

我遇到了建议进行一些迭代的答案。 但我试图知道它是否可以通过PHP的任何数组函数或这些数组函数的任何组合来实现。

2 个答案:

答案 0 :(得分:1)

这是一种在代码中没有“foreach”循环的方法。

$array = [
  'Foo and Bar',
  'Bar and Baz',
  'Baz and Foo'
];

$explodedArray = array_map( function( $v ){ return explode( ' and ', $v ); }, $array );

$Array1 = array_column( $explodedArray, 0 );
$Array2 = array_column( $explodedArray, 1 );

答案 1 :(得分:1)

您可以使用array_walk

$Array = [
    'Foo and Bar',
    'Bar and Baz',
    'Baz and Foo'
];

$return = [];
array_walk($Array, function($v) use(&$return){
    list($return['Array1'][], $return['Array2'][]) = preg_split('/\s+and+\s/i', $v);
});
extract($return);

演示:https://paiza.io/projects/gGYT_UfojR9odDc7KoHOHg

输出

// Array1
$Array1 = [
    'Foo',
    'Bar',
    'Baz'
];

// Array2
$Array2 = [
    'Bar',
    'Baz',
    'Foo'
];