[英]How do I sort an Array with comma separated strings in PHP?
这是我在这里的第一篇文章,我是一个初学者,我希望你能轻松对待我。 我搜索了一个答案,并阅读了一些半相关的问题。 我已经坚持了几天,我真的很困惑。 抱歉,如果双桶是失礼的话,把它写成两个单独的问题似乎不太明智。 我是编程新手,直到昨天我才听说过这个网站,我希望成为一个看起来很棒的社区的贡献者。
我有一个数组,$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
有人可以引导我朝着正确的方向前进吗?
你的 $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);
?>
$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
)
)
对于您的第一个问题,请尝试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>';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.