这是我在这里发表的第一篇文章,我是初学者,我希望你会对我很轻松。 我搜索了一个答案,并阅读了一些与半相关的问题。我已经被困在这几天了,我真的很困惑。 如果双管是一个失礼的道歉,那么把它写成两个单独的问题似乎不太明智。 我是编程新手,直到昨天我才听说过这个网站,我希望能成为一个很棒的社区。 p>
我有一个数组,$ newarray:
Array
(
[2] => string1,10
[7] => string2,15
[10] => string3,3
[11] => string4,7
)
我可以将它写入CSV文件,到目前为止一直很好:
<?php
$file = fopen("/myfile.csv","w");
foreach ($newarray as $line)
{
fputcsv($file,explode(',',$line));
}
fclose($file);
?>
但是,我正在尝试做两件事。
在写入CSV之前按数值的反向顺序对数组进行排序,因此我会有一个CSV文件:
string2,15 string1,10 string4,7 string3,3
创建第二个文件(在写完第一个CSV之后),其中数值被删除,如下所示:
string2 string1 string4 string3
有人能引导我朝着正确的方向前进吗?
答案 0 :(得分:1)
你的$ newArray是否必须具有连接值?如果没有,最好将它们作为子阵列:
$newArray = array (
2 => array(
0 => 'string1',
1 => 10,
),
7 => array(
0 => 'string2',
1 => 15,
),
10 => array(
0 => 'string3',
1 => 3,
),
11 => array(
0 => 'string4',
1 => 7,
),
);
然后你可以使用array_multisort进行排序:
$strings = array();
$numbers = array();
foreach ($newArray as $key => $row) {
$strings[$key] = $row[0];
$numbers[$key] = $row[1];
}
array_multisort($numbers, SORT_DESC, $strings, SORT_ASC, $newArray);
当您写入CSV时:
<?php
$file = fopen("/myfile.csv","w");
foreach ($newArray as $line) {
fputcsv($file, $line); // No need to explode as your data ia already in an array
}
fclose($file);
?>
仅使用字符串写入第二个CSV:
<?php
reset($newArray); // Sets the pointer in the array back to the beginning so it can be looped over again
$file = fopen("/myfile2.csv","w");
foreach ($newArray as $line) {
fputcsv($file, $line[0]);
}
fclose($file);
?>
答案 1 :(得分:1)
(function (angular) {
'use strict';
angular
.module('application')
.factory('CommunicationService',
[
'$http',
CommunicationService
]
);
})(angular);
输出:
$arraybase = array(
2 => 'string1,10',
7 => 'string2,15',
10 => 'string3,3',
11 => 'string4,7',
);
function mapping($data){
$array1 = array();//for first csv
array_walk($data,function($value,$key)use(&$array1){
$k=explode(',',$value);
$array1[$k[1]] = $value;
});
krsort($array1);
$array2 = array_map(function($value){//for second csv
return preg_replace('/,\d+$/','',$value);
},$array1);
return array("csv1"=>$array1,"csv2"=>$array2);
}
$result = mapping($arraybase);
print('<pre>');print_r($result);
答案 2 :(得分:0)
对于您的第一个问题,请尝试http://php.net/manual/en/function.rsort.php并在拍摄时给予它:)
答案 3 :(得分:0)
$a=array(/* Original array */
2 => 'string1,10',
7 => 'string2,15',
10 => 'string4,3',
11 => 'string4,7'
);
$c=array();
foreach( $a as $index => $value ){
list($s,$i)=explode(',', $value );
$c[$i]=$value;
}
/* Sort in reverse order */
krsort($c);
/* The value of $c is then written to your csv */
/* callback function to get the string */
function cb(&$item,$key){
list( $s,$i )=explode(',',$item );
$item=$s;
}
array_walk( $c, 'cb' );
echo '<pre>',print_r($b,true),'</pre>';