Loading README.md +93 −0 Original line number Original line Diff line number Diff line Loading @@ -59,4 +59,97 @@ function getUser {} */ */ function getUser {} function getUser {} ``` ``` ### 3、对集合获取值、然后调用rpc方法获取数据后,重新赋值 #### 1)、获取值,设置值 ``` $list = Task::with(['c'=>function($q){ $q->select(['d','y']); }])->select(['c','v'])->->paginate(2); /* * 假设拿到的数据是这个 * $list = [['c' => ['d' => 4, 'y' => 9], 'v' => '5'], ['c'=>'','v'=>'8'], ['c' => ['d' => 6, 'y' => 10], 'v' => '7']]; */ $user_ids = get_collection_values($list, 'c.d'); // 去RPC拿用户数据 $users = $this->userService->getByIdList($hello); //重新赋值给列表 put_collection_values($list, $users, 'c.d', 'user', 'id'); /* * 则新的数据如下 * $list = [['c' => ['d' => 4,'user'=>['id'=>4,'name'=>'张三'], 'y' => 9], 'v' => '5'], ['c'=>'','v'=>'8'], ['c' => ['d' => 6, ,'user'=>['id'=>6,'name'=>'王五']'y' => 10], 'v' => '7']]; */ ``` #### 2)、判断各种值和更新各种值 ``` // 使用第一步获取的列表 // askModel文件 新增获取值,和设置值方法 * 动态判断 * @param $currentUserId */ public function getCanDelete($currentUserId) { $this->attributes['can_delete'] = $this->user_id == $currentUserId ? true : false; } /**新增time_show属性 * @return string 返回友好时间值 */ public function getTimeShowAttribute() { if ($this->status == 2) { return '已完成'; } $time = time(); if ($this->status === 0) { $time = $time - strtotime($this->start_time); return human_time($time) . "后开始"; } if ($this->status === 1) { $time = $time - strtotime($this->end_time); if ($time > 0) { return "超时" . human_time($time); } return human_time($time) . "后结束"; } } /** * 设置结束时间 * @param string $time */ public function setFinishAttribute($time = '') { $this->attributes['finish'] = $time ? $time : today(); } // TaskRepositoryEloquent 文件 // 获取列表方法 .. ..... $currentUserId = Auth::id(); foreach ($list->items() as $item) { $item->getCanDelete($currentUserId);//结果会新增 can_delete属性 $item->time_show;//自动调用getTimeShowAttribute方法,并设置值 $item->finish=today();//自动调用setFinishAttribute方法,并设置值 } return $list;//集合自动转数组,会带上新的三个属性,和分页数据 ``` ### 4、新方法说明 #### 1)、human_time 友好的显示时间 用法: ``` human_time(time()-strtotime('2020-06-06 12:12')); //12分钟等等根据计算值自动显示时分秒,不足一分钟显示秒,不足一小时显示分 //不足一天显示小时 //可以自行测试 ``` #### 2)、info 输出数据到控制台,支持任何数据,自动换行 方便测试 用法: ``` //支持多参数 info('aaa',[1,2,3],new stdClass(){$a=1;},collect([1,23,4])); info(1); ``` src/functions.php +135 −3 Original line number Original line Diff line number Diff line Loading @@ -474,6 +474,138 @@ if (!function_exists('empty_string_2_null')) { } } } } if (!function_exists('get_collection_values')) { /** * 从集合中提取深层数据 * @param $collection 数据集合 * @param string $key 集合中键 支持多层提取,例如"a.b.c" * @return array | collection */ function get_collection_values($collection, string $key) { $values = []; if (!empty($collection) && (is_object($collection) || is_array($collection))) { $itemKeys = explode(".", $key); $keyCount = count($itemKeys) - 1; foreach ($collection as $value) { foreach ($itemKeys as $k => $ik) { if (isset($value[$ik])) { $value = $value[$ik]; if ($k == $keyCount) { $values[] = $value; } } else { break; } } } } return $values; } } if (!function_exists('put_collection_values')) { /** * 对集合中设置深层数据 * @param array | collection $collection 需要设置的数据集合 * @param array | collection $valueList 需要设置值集合 * @param string $collectionKey 集合中键 支持多层提取,例如"user.info" * @param string $collectionNewKey 数据集合的新键,例如"infomation",同名会覆盖 * @param string $valueKey $valueList中的值字段,例如"user_id" * @return array | collection */ function put_collection_values($collection, $valueList, string $collectionKey, string $collectionNewKey, $valueKey) { if (!empty($collection) && (is_object($collection) || is_array($collection))) { $itemKeys = explode(".", $collectionKey); if (!empty($valueList)) { if (!is_object($valueList)) { $valueList = collect($valueList); } $valueList = $valueList->keyBy($valueKey); } foreach ($collection as $index => $value) { $collection[$index] = private_put_collection_values($value, $itemKeys, $valueList, $collectionNewKey); } } return $collection; } } if (!function_exists('private_put_collection_values')) { /** * 对集合设置值,不对外公开 * @param $collection * @param $itemKeys * @param $valueList * @param $collectionNewKey * @return mixed */ function private_put_collection_values(&$collection, $itemKeys, $valueList, $collectionNewKey) { if (isset($collection[$itemKeys[0]])) { if (count($itemKeys) != 1) { $t = $itemKeys[0]; unset($itemKeys[0]); $itemKeys = array_values($itemKeys); $collection[$t] = private_put_collection_values($collection[$t], $itemKeys, $valueList, $collectionNewKey); } else { if (isset($valueList[$collection[$itemKeys[0]]])) { $collection[$collectionNewKey] = $valueList[$collection[$itemKeys[0]]]; } else { $collection[$collectionNewKey] = null; } } } return $collection; } } if (!function_exists('human_time')) { /** * 计算时间 * @param $time 时间戳 * @return string */ function human_time($time) { if (is_numeric($time)) { $time = strtotime($time); } $time = abs($time); //计算天数 $days = intval($time / 86400); if ($days != 0) { return $days . "天"; } //计算小时数 $remain = $time % 86400; $hours = intval($remain / 3600); if ($hours != 0) { return $hours . "小时"; } //计算分钟数 $remain = $time % 3600; $mins = intval($remain / 60); if ($mins != 0) { return $mins . "分钟"; } //计算秒数 $secs = $time % 60; return $secs . "秒"; } } if (!function_exists('info')) { /** * 输出数据到控制台 * @param mixed ...$arguments */ function info(...$arguments) { var_dump(...$arguments); } } Loading
README.md +93 −0 Original line number Original line Diff line number Diff line Loading @@ -59,4 +59,97 @@ function getUser {} */ */ function getUser {} function getUser {} ``` ``` ### 3、对集合获取值、然后调用rpc方法获取数据后,重新赋值 #### 1)、获取值,设置值 ``` $list = Task::with(['c'=>function($q){ $q->select(['d','y']); }])->select(['c','v'])->->paginate(2); /* * 假设拿到的数据是这个 * $list = [['c' => ['d' => 4, 'y' => 9], 'v' => '5'], ['c'=>'','v'=>'8'], ['c' => ['d' => 6, 'y' => 10], 'v' => '7']]; */ $user_ids = get_collection_values($list, 'c.d'); // 去RPC拿用户数据 $users = $this->userService->getByIdList($hello); //重新赋值给列表 put_collection_values($list, $users, 'c.d', 'user', 'id'); /* * 则新的数据如下 * $list = [['c' => ['d' => 4,'user'=>['id'=>4,'name'=>'张三'], 'y' => 9], 'v' => '5'], ['c'=>'','v'=>'8'], ['c' => ['d' => 6, ,'user'=>['id'=>6,'name'=>'王五']'y' => 10], 'v' => '7']]; */ ``` #### 2)、判断各种值和更新各种值 ``` // 使用第一步获取的列表 // askModel文件 新增获取值,和设置值方法 * 动态判断 * @param $currentUserId */ public function getCanDelete($currentUserId) { $this->attributes['can_delete'] = $this->user_id == $currentUserId ? true : false; } /**新增time_show属性 * @return string 返回友好时间值 */ public function getTimeShowAttribute() { if ($this->status == 2) { return '已完成'; } $time = time(); if ($this->status === 0) { $time = $time - strtotime($this->start_time); return human_time($time) . "后开始"; } if ($this->status === 1) { $time = $time - strtotime($this->end_time); if ($time > 0) { return "超时" . human_time($time); } return human_time($time) . "后结束"; } } /** * 设置结束时间 * @param string $time */ public function setFinishAttribute($time = '') { $this->attributes['finish'] = $time ? $time : today(); } // TaskRepositoryEloquent 文件 // 获取列表方法 .. ..... $currentUserId = Auth::id(); foreach ($list->items() as $item) { $item->getCanDelete($currentUserId);//结果会新增 can_delete属性 $item->time_show;//自动调用getTimeShowAttribute方法,并设置值 $item->finish=today();//自动调用setFinishAttribute方法,并设置值 } return $list;//集合自动转数组,会带上新的三个属性,和分页数据 ``` ### 4、新方法说明 #### 1)、human_time 友好的显示时间 用法: ``` human_time(time()-strtotime('2020-06-06 12:12')); //12分钟等等根据计算值自动显示时分秒,不足一分钟显示秒,不足一小时显示分 //不足一天显示小时 //可以自行测试 ``` #### 2)、info 输出数据到控制台,支持任何数据,自动换行 方便测试 用法: ``` //支持多参数 info('aaa',[1,2,3],new stdClass(){$a=1;},collect([1,23,4])); info(1); ```
src/functions.php +135 −3 Original line number Original line Diff line number Diff line Loading @@ -474,6 +474,138 @@ if (!function_exists('empty_string_2_null')) { } } } } if (!function_exists('get_collection_values')) { /** * 从集合中提取深层数据 * @param $collection 数据集合 * @param string $key 集合中键 支持多层提取,例如"a.b.c" * @return array | collection */ function get_collection_values($collection, string $key) { $values = []; if (!empty($collection) && (is_object($collection) || is_array($collection))) { $itemKeys = explode(".", $key); $keyCount = count($itemKeys) - 1; foreach ($collection as $value) { foreach ($itemKeys as $k => $ik) { if (isset($value[$ik])) { $value = $value[$ik]; if ($k == $keyCount) { $values[] = $value; } } else { break; } } } } return $values; } } if (!function_exists('put_collection_values')) { /** * 对集合中设置深层数据 * @param array | collection $collection 需要设置的数据集合 * @param array | collection $valueList 需要设置值集合 * @param string $collectionKey 集合中键 支持多层提取,例如"user.info" * @param string $collectionNewKey 数据集合的新键,例如"infomation",同名会覆盖 * @param string $valueKey $valueList中的值字段,例如"user_id" * @return array | collection */ function put_collection_values($collection, $valueList, string $collectionKey, string $collectionNewKey, $valueKey) { if (!empty($collection) && (is_object($collection) || is_array($collection))) { $itemKeys = explode(".", $collectionKey); if (!empty($valueList)) { if (!is_object($valueList)) { $valueList = collect($valueList); } $valueList = $valueList->keyBy($valueKey); } foreach ($collection as $index => $value) { $collection[$index] = private_put_collection_values($value, $itemKeys, $valueList, $collectionNewKey); } } return $collection; } } if (!function_exists('private_put_collection_values')) { /** * 对集合设置值,不对外公开 * @param $collection * @param $itemKeys * @param $valueList * @param $collectionNewKey * @return mixed */ function private_put_collection_values(&$collection, $itemKeys, $valueList, $collectionNewKey) { if (isset($collection[$itemKeys[0]])) { if (count($itemKeys) != 1) { $t = $itemKeys[0]; unset($itemKeys[0]); $itemKeys = array_values($itemKeys); $collection[$t] = private_put_collection_values($collection[$t], $itemKeys, $valueList, $collectionNewKey); } else { if (isset($valueList[$collection[$itemKeys[0]]])) { $collection[$collectionNewKey] = $valueList[$collection[$itemKeys[0]]]; } else { $collection[$collectionNewKey] = null; } } } return $collection; } } if (!function_exists('human_time')) { /** * 计算时间 * @param $time 时间戳 * @return string */ function human_time($time) { if (is_numeric($time)) { $time = strtotime($time); } $time = abs($time); //计算天数 $days = intval($time / 86400); if ($days != 0) { return $days . "天"; } //计算小时数 $remain = $time % 86400; $hours = intval($remain / 3600); if ($hours != 0) { return $hours . "小时"; } //计算分钟数 $remain = $time % 3600; $mins = intval($remain / 60); if ($mins != 0) { return $mins . "分钟"; } //计算秒数 $secs = $time % 60; return $secs . "秒"; } } if (!function_exists('info')) { /** * 输出数据到控制台 * @param mixed ...$arguments */ function info(...$arguments) { var_dump(...$arguments); } }