这是我在这里的第一篇文章,我是一个初学者,我希望你能对我放轻松。我搜索了一个答案,并阅读了一些半相关的问题。我已经坚持了几天了,我真的很困惑。抱歉,如果双管是失礼,将其写成两个单独的问题似乎不太明智。我是编程新手,直到昨天我才听说过这个网站,我希望能成为一个很棒的社区的贡献者。
我有一个数组,$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
有人能引导我走向正确的方向吗?
$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);
输出:
Array
(
[csv1] => Array
(
[15] => string2,15
[10] => string1,10
[7] => string4,7
[3] => string3,3
)
[csv2] => Array
(
[15] => string2
[10] => string1
[7] => string4
[3] => string3
)
)
您的$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);
?>
对于您的第一个问题,请尝试 http://php.net/manual/en/function.rsort.php 并在拍摄时给出它:)
$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>';