php函式入門學習(陣列常見函式2 & 檔案基礎讀寫)

芝麻小仙女發表於2024-07-16

// 1、寫一個函式,傳入陣列,返回陣列中元素為數字且大於10的新結果陣列

function getNumArr($arr)
{
if (!$arr) return '請傳入陣列';
$arr2 = array_filter($arr, function ($v) {
// echo gettype($v)."<br>";
return gettype($v) === 'integer' && $v > 10;
});
return $arr2;
}

echo "1、" . "<br>";
print_r(getNumArr(['1', '2', 3, 44]));
echo "<br>";
echo "<hr>";

// 2、寫一個函式,傳入字串,內容為中文逗號或英文逗號分隔組成的手機號集合,判斷手機號是否符合格式規範。返回陣列

function getPhoneArr($str)
{
// 先把中文逗號替換成英文的,再統一切割成陣列
$arr1 = str_replace(',', ',', $str);
$arrPhone = explode(',', trim($arr1));
// 正則一次性搞定 ↓
// $arr3 = preg_split("/(,|,)/",$str);
$arrReturn = array();
foreach ($arrPhone as $v) {
if ($v) {
$arrReturn[] = array(
'phone' => $v,
'isRealPhone' => preg_match("/^1[34578]\d{9}$/", $v) ? '手機號格式正確' : '手機號格式不符合格式規範',
);
}
}
return $arrReturn;
}

echo "2、" . "<br>";
print_r(getPhoneArr('15677778888,19777778888,18688889999,'));
echo "<br>";
echo "<hr>";

// 3、寫一個函式,傳入陣列套陣列,形如[["name" => "張三", "age" => 20], ["name" => "李四", "age" => 30],]

// 返回a: 年齡大於18的人
// 返回b: 女性
function getWomen($arr)
{
$arrAdults = array();
$arrWomen = array();
// 還是foreach節能,只要迴圈一次
foreach ($arr as $v) {
if ($v && $v["age"] && $v["age"] >= 18) {
$arrAdults[] = $v;
}
if ($v && $v["gender"] && $v["gender"] === 'woman') {
$arrWomen[] = $v;
}
}
// $arrAdults = array_filter($arr, function($v){
// return $v && $v["age"] && $v["age"] >= 18;
// });
// $arrWomen = array_filter($arr, function($v){
// return $v && $v["gender"] && $v["gender"] === 'woman';
// });
return array(
"a" => $arrAdults,
"b" => $arrWomen,
);
}
echo "3、" . "<br>";
print_r(getWomen([["name" => "張美麗", "age" => 20, "gender" => 'woman'], ["name" => "李四娃", "age" => 30, "gender" => 'man'], ["name" => "李四美", "age" => 3, "gender" => 'woman']]));
echo "<br>";
echo "<hr>";

// 4、寫一個函式,傳入人名、陣列套陣列,形如[["name" => "張三", "age" => 20], ["name" => "李四", "age" => 30],]

// 判斷人名是否在陣列中
function getHaveName($str, $arr)
{
$arr1 = array_column($arr, 'name');
// print_r($arr1);
$isInArr = in_array($str, $arr1);
return $isInArr ? $str . '在陣列中' : $str . '不在陣列中';
}
echo "4、" . "<br>";
echo (getHaveName("李", [["name" => "張三", "age" => 20], ["name" => "李四", "age" => 30],]));
echo "<br>";
echo "<hr>";

// 5、有一篇文章,裡面會有逗號和句號。刪除其中重複的句子
function getNoRepeat($str)
{
$arr = explode('。', trim($str));
// 移除陣列中的重複值
$uniqueArr =
($arr);
// 把字串用句號重新拼接起來
$output = implode('。', $uniqueArr);
return $output;
}
echo "5、" . "<br>";
echo getNoRepeat("李四說他是個神經病,我認為不是。李四說他是個神經病,我認為不是。李四說他是個神經病,我認為不是,啊啊啊啊啊啊啊啊");
echo "<br>";
echo "<hr>";
------

// 今日作業:

// 讀取表格內容,轉化為二維陣列:大陣列套小陣列

// 每個大陣列都是一行,小陣列形如:array("xx訂單號" => "xxxx", "IOS訂單號" => "XXXX")

// 即將第一行表頭作為小陣列的每個元素的key

$a = file_get_contents("data.csv");
$aa = mb_convert_encoding($a, 'UTF-8');
// 先按行分開資料
$data1 = explode("\n", trim($aa));
$$keys = array();
$values = array();

$index = 0;
foreach ($data1 as $v) {
// 分開列名和資料
if ($index === 0) {
$keys = explode(",", trim($data1[0]));
} else {
$values[] = explode(",", trim($data1[$index]));
}
$index++;
}

$list = array();
// 遍歷每一行資料,改造成鍵值對
foreach ($values as $v) {
$line = array();
$index2 = 0;
foreach ($keys as $v2) {
$line[$v2] = $v[$index2];
$index2++;
}
$list[] = $line;
}

// echo "組裝好的資料" . "<br>";
// var_export($list);
// var_export("<hr>");


// 作業二:

// 將上述陣列,還原為上圖表格,並寫入新檔案

// 獲取列名作為第一行資料
$keys2 = implode(',', array_keys($list[0]));
$values2 = array();
$index3 = 0;
foreach ($list as $v) {
$values2[] = implode(',', array_values($v));
$index3++;
}
$list2 = array();
$list2[] = $keys2;
foreach ($values2 as $v) {
$list2[] = $v;
}
$valuesString = implode("\n", $list2);
file_put_contents("new_data.csv", $valuesString);
// echo "list2" . "<br>";
// var_export($valuesString);
// var_export("<hr>");

// file_put_contents("111", $a, FILE_APPEND);

相關文章