有没有办法可以在不迭代每个项目的情况下爆炸大数组的数组值?
例如我有
$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的任何数组函数或这些数组函数的任何组合来实现。
答案 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'
];