php函数入门学习(数组常见函数2 & 文件基础读写)
// 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);