[英]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.