我有一些看起来像下面的数组
array(
[0] =>
array( ['direction'] => '0.000,0.160,0.123,0.104,0.000' )
[1] =>
array( ['direction'] => '0.000,0.101,0.237,0.101,0.000' )
[2] =>
array( ['direction'] => '0.000,0.160,0.125,0.163,0.000' )
)
使用for循环,我想生成一个看起来像
的新数组data1 = [0.000, 0.000, 0.000]
data2 = [0.160, 0.101, 0.160]
data3 = [0.123, 0.237, 0.125]
data4 = [0.104, 0.101, 0.163]
data5 = [0.000, 0.000, 0.000]
这意味着使用for循环,我想得到每列的值,然后将该值分配给每个新数组。
我试图做的是
$cnt = count($array);
$buildCnt = count($array['direction']);
for($i = 0; $i < $cnt; $i++){
for($j = 0; $j < buildCnt; $j++){
'i need to do something here
}
}
有人帮我吗?
感谢
答案 0 :(得分:1)
我不知道通过数组函数是否有更好的方法,你也可以使用正常的foreach循环。像这样:
$original_array = array(
array('direction' => '0.000,0.160,0.123,0.104,0.000'),
array('direction' => '0.000,0.101,0.237,0.101,0.000'),
array('direction' => '0.000,0.160,0.125,0.163,0.000'),
);
$new_array = array();
foreach($original_array as $sub_array) {
// loop each sub array
$pieces = explode(',', $sub_array['direction']);
// explode by comma
foreach($pieces as $key => $piece) {
// each piece, push by data(n)
$new_array["data".($key+1)][] = $piece;
// if you don't want to use extract
// ${"data".($key+1)}[] = $piece;
}
}
extract($new_array); // import newly created sub arrays
echo '<pre>';
print_r($data1); // $data2, $data3, ... and so on
$data1
应如下所示:
Array
(
[0] => 0.000
[1] => 0.000
[2] => 0.000
)
答案 1 :(得分:1)
$arr = array(array( 'direction' => '0.000,0.160,0.123,0.104,0.000' ),array( 'direction' => '0.000,0.101,0.237,0.101,0.000' ),array( 'direction' => '0.000,0.160,0.125,0.163,0.000' ));
foreach($arr AS $dirArr){
$dirs = explode(",",$dirArr['direction']);
for($i = 0; $i < count($dirs); $i++) $data[$i][] = $dirs[$i];
}
如果你真的需要它们是那些变量名......
$data1 = $data[0];
$data2 = $data[1];
$data3 = $data[2];
$data4 = $data[3];
$data5 = $data[4];
答案 2 :(得分:1)
function loop_array($input) {
foreach ($input as $val) {
$mydata = explode(',', $val['direction']);
foreach ($mydata as $k => $v) {
$output[$k][] = $v;
}
}
return $output;
}
答案 3 :(得分:1)
$data = array(
array('direction' => '0.000,0.160,0.123,0.104,0.000'),
array('direction' => '0.000,0.101,0.237,0.101,0.000'),
array('direction' => '0.000,0.160,0.125,0.163,0.000')
);
当每个值为exploded
时,键将已经匹配您希望将它们放在最终数组中的索引。每个中的第一项将是0,接下来是1等。
示例:
explode(',','0.000,0.160,0.123,0.104,0.000');
array (size=5)
0 => string '0.000' (length=5)
1 => string '0.160' (length=5)
2 => string '0.123' (length=5)
3 => string '0.104' (length=5)
4 => string '0.000' (length=5)
那么它就可以直接在输出上重用这些索引。
$output = array();
foreach ($data as $row) {
// Skip row, handling error from potential missing key.
// Could also first validate the return from explode.
if (!isset($row['direction'])) continue;
foreach (explode(',',$row['direction']) as $key => $value) {
$output[$key][] = $value;
}
}
var_dump($output);
结果:
array (size=5)
0 =>
array (size=3)
0 => string '0.000' (length=5)
1 => string '0.000' (length=5)
2 => string '0.000' (length=5)
1 =>
array (size=3)
0 => string '0.160' (length=5)
1 => string '0.101' (length=5)
2 => string '0.160' (length=5)
2 =>
array (size=3)
0 => string '0.123' (length=5)
1 => string '0.237' (length=5)
2 => string '0.125' (length=5)
3 =>
array (size=3)
0 => string '0.104' (length=5)
1 => string '0.101' (length=5)
2 => string '0.163' (length=5)
4 =>
array (size=3)
0 => string '0.000' (length=5)
1 => string '0.000' (length=5)
2 => string '0.000' (length=5)
geez,被5人殴打!
答案 4 :(得分:1)
此解决方案首先创建一个中间数组,并计算最长的“方向”数组。如果“方向”中的数据点数量不总是相同(这样我们就知道要创建多少个数组),这是必要的。如果“方向”值始终具有相同数量的数据点,则可以简化此操作(请参阅其他答案)。
$data = array(
array( 'direction' => '0.000,0.160,0.123,0.104,0.000' ),
array( 'direction' => '0.000,0.101,0.237,0.101,0.000' ),
array( 'direction' => '0.000,0.160,0.125,0.163,0.000' )
);
$maxLength = 0;
$tempData = array();
foreach( $data as $datum ) {
$tempDatum = isset( $datum[ 'direction' ] ) ? explode( ',', $datum[ 'direction' ] ) : array();
$maxLength = max( $maxLength, count( $tempDatum ) );
$tempData[] = $tempDatum;
}
$newData = array();
for( $i = 0; $i < $maxLength; $i++ ) {
$new = array();
for( $j = 0, $len = count( $tempData ); $j < $len; $j++ ) {
$new[] = isset( $tempData[ $j ][ $i ] ) ? $tempData[ $j ][ $i ] : null;
}
$newData[] = $new;
}
var_dump( $newData );