提交 8de41a52 编写于 作者: 彭世瑜's avatar 彭世瑜

fix

上级 ec4d8e13
# 数组相关函数 # 数组相关函数
自定义数组打印函数,便于查看 自定义数组打印函数,便于查看
```php ```php
...@@ -15,7 +14,7 @@ function print_array($array){ ...@@ -15,7 +14,7 @@ function print_array($array){
## 排序函数 ## 排序函数
按照ASCII码排序 按照 ASCII 码排序
`sort` 对 array 本身按照值(value)升序排序。(下标重排) `sort` 对 array 本身按照值(value)升序排序。(下标重排)
...@@ -52,7 +51,6 @@ print_array($arr); ...@@ -52,7 +51,6 @@ print_array($arr);
// 2 => Jack // 2 => Jack
``` ```
`asort` 对 array 自身按照升序进行排序(下标保留) `asort` 对 array 自身按照升序进行排序(下标保留)
```php ```php
...@@ -87,7 +85,6 @@ print_array($arr); ...@@ -87,7 +85,6 @@ print_array($arr);
// 1 => Jack // 1 => Jack
``` ```
`ksort` 对 array 本身进行按键(key)升序排序。 `ksort` 对 array 本身进行按键(key)升序排序。
```php ```php
...@@ -141,21 +138,196 @@ print_array($arr); ...@@ -141,21 +138,196 @@ print_array($arr);
## 指针函数 ## 指针函数
reset reset 将 array 的内部指针倒回到第一个单元并返回第一个数组单元的值。
end
next ```php
prev reset(array|object &$array): mixed
current ```
key
end 将 array 的内部指针移动到最后一个单元并返回其值。
```php
end(array|object &$array): mixed
```
next 将数组中的内部指针向前移动一位
```php
next(array|object &$array): mixed
```
prev 将数组的内部指针倒回一位
```php
prev(array|object &$array): mixed
```
current 返回数组中的当前值
```php
current(array|object $array): mixed
```
key 返回数组中当前单元的键名。
```php
key(array|object $array): int|string|null
```
> 注意:next 和 prev 移动指针,可能移出数组,只能通过 end 或者 reset 重置指针
示例
```php
$arr = [1, 3, 5, 7, 9];
echo next($arr);
echo next($arr);
echo prev($arr);
echo current($arr);
echo key($arr);
echo reset($arr);
echo end($arr);
// 3533119
```
## 其他函数 ## 其他函数
count count 统计数组、Countable 对象中所有元素的数量
array_push()
array_pop ```php
array_reverse count(Countable|array $value, int $mode = COUNT_NORMAL): int
in_array
array_keys // eg:
array_values $arr = [1, 2, 3, 4, 5];
echo count($arr);
// 5
```
array_push 将 array 当成一个栈,并将传入的变量压入 array 的末尾。
```php
array_push(array &$array, mixed $value1, mixed $... = ?): int
// 和如下效果相同:
$array[] = $var;
```
array_pop 弹出并返回 array 最后一个元素的值
```php
array_pop(array &$array): mixed
```
array_shift 将 array 的第一个单元移出并作为结果返回
```php
array_shift(array &$array): mixed
```
array_unshift 在数组开头插入一个或多个单元
```php
array_unshift(array &$array, mixed ...$values): int
```
数据结构
- 栈 压栈,FILO先进后出
- 队列 排队,FIFO 先进先出
实现栈:
- 前面 array_unshift/array_shift
- 后面 array_push/array_pop
```php
<?php
$arr = [];
// 入栈
array_push($arr, 1);
array_push($arr, 2);
array_push($arr, 3);
// 出栈
echo array_pop($arr), array_pop($arr), array_pop($arr);
// 321
```
实现队列:
- 后进前出 array_push/array_shift
- 前进后出 array_unshift/array_pop
```php
<?php
$arr = [];
// 入队
array_push($arr, 1);
array_push($arr, 2);
array_push($arr, 3);
// 出队
echo array_shift($arr), array_shift($arr), array_shift($arr);
// 123
```
array_reverse 返回一个单元为相反顺序的新数组
```php
array_reverse(array $array, bool $preserve_keys = false): array
https://www.bilibili.com/video/BV18x411H7qD?p=87&spm_id_from=pageDriver // eg
\ No newline at end of file $arr = [1, 2, 3, 4, 5];
print_array(array_reverse($arr));
// 0 => 5
// 1 => 4
// 2 => 3
// 3 => 2
// 4 => 1
```
in_array 检查数组中是否存在某个值
```php
in_array(mixed $needle, array $haystack, bool $strict = false): bool
// eg
$arr = [1, 2, 3, 4, 5];
var_dump(in_array(5, $arr));
// bool(true)
```
array_keys 返回数组中部分的或所有的键名
```php
array_keys(array $array): array
array_keys(array $array, mixed $search_value, bool $strict = false): array
// eg
$arr = ['Tom', 'Jack', 'Steve'];
echo json_encode(array_keys($arr));
// [0,1,2]
```
array_values 返回 input 数组中所有的值并给其建立数字索引。
```php
array_values(array $array): array
// eg
$arr = ['Tom', 'Jack', 'Steve'];
echo json_encode(array_values($arr));
// ["Tom","Jack","Steve"]
```
...@@ -27,3 +27,5 @@ ...@@ -27,3 +27,5 @@
[PHP 数组 array](blog/php-basic/array.md) [PHP 数组 array](blog/php-basic/array.md)
[PHP 数组相关函数](blog/php-basic/array-function.md) [PHP 数组相关函数](blog/php-basic/array-function.md)
[编程思想](blog/php-basic/thinking.md)
# 编程思想
编程思想:利用数学模式,来解决对应的需求问题,然后利用代码实现对象的数据模型
算法:使用代码实现对应的数学模型,从而解决对应的业务问题
## 递推算法
是一种简单的算法,即通过已知条件,利用特定关系得出中间结论,直至得到结果的算法
递推算法的分类:
- 顺推 通过最简单的条件(已知),然后逐步推演结果
- 逆推 通过结果找到规律,然后推到已知条件
递推思想:菲波那切数列
```php
<?php
// 1 1 2 3 5 8 13...
// 规律 第一个数为1,第二个数为1,第三个数开始为前两数之和
// n(3) = n(2) + n(1);
$f[1] = 1;
$f[2] = 1;
$n = 5;
for($i = 3; $i <= $n; $i++){
$f[$i] = $f[$i - 1] + $f[$i - 2];
}
echo json_encode($f);
// {"1":1,"2":1,"3":2,"4":3,"5":5}
```
封装为函数
```php
<?php
// 1 1 2 3 5 8 13...
// 规律 第一个数为1,第二个数为1,第三个数开始为前两数之和
// n(3) = n(2) + n(1);
function fibonacci($n){
// 判断为第一个或第二个直接返回
if($n == 2 || $n == 2){return 1;}
$f[1] = 1;
$f[2] = 1;
for($i = 3; $i <= $n; $i++){
$f[$i] = $f[$i - 1] + $f[$i - 2];
}
// 返回最后一个
return $f[$n];
}
echo fibonacci(7);
// 13
```
https://www.bilibili.com/video/BV18x411H7qD?p=90&spm_id_from=pageDriver
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册