php获取特定健的值,php-仅从Laravel Collection获取特定属性

我现在提出了自己的解决方案:

1.创建一个通用函数以从数组中提取特定属性

下面的函数仅从关联数组或关联数组的数组中提取特定属性(最后一个是在Laravel中执行$ collection-> toArray()时获得的结果)。

可以这样使用:

$data = array_extract( $collection->toArray(), ['id','url'] );

我正在使用以下功能:

function array_is_assoc( $array )

{

return is_array( $array ) && array_diff_key( $array, array_keys(array_keys($array)) );

}

function array_extract( $array, $attributes )

{

$data = [];

if ( array_is_assoc( $array ) )

{

foreach ( $attributes as $attribute )

{

$data[ $attribute ] = $array[ $attribute ];

}

}

else

{

foreach ( $array as $key => $values )

{

$data[ $key ] = [];

foreach ( $attributes as $attribute )

{

$data[ $key ][ $attribute ] = $values[ $attribute ];

}

}

}

return $data;

}

该解决方案不关注循环遍历大型数据集中的集合对性能的影响。

2.通过Laravel的自定义集合实现以上内容

由于我希望能够简单地对任何集合对象执行$collection->extract('id','url');,因此我实现了一个自定义集合类。

首先,我创建了一个通用模型,该模型扩展了Eloquent模型,但是使用了一个不同的集合类。 您所有的模型都需要扩展此自定义模型,而不是Eloquent模型。

namespace App\Models;

use Illuminate\Database\Eloquent\Model as EloquentModel;

use Lib\Collection;

class Model extends EloquentModel

{

public function newCollection(array $models = [])

{

return new Collection( $models );

}

}

?>

其次,我创建了以下自定义集合类:

namespace Lib;

use Illuminate\Support\Collection as EloquentCollection;

class Collection extends EloquentCollection

{

public function extract()

{

$attributes = func_get_args();

return array_extract( $this->toArray(), $attributes );

}

}

?>

最后,所有模型都应改为扩展自定义模型,例如:

namespace App\Models;

class Article extends Model

{

...

现在的功能从无到有。 集合巧妙地使用上述1来使$collection->extract()方法可用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ConcurrentHashMap是Java中的一个线程安全的哈希表实现,它允许多个线程同时进行读和写入操作而不会导致数据不一致的问题。它是通过将整个哈希表分成多个段(Segment)来实现并发控制的。 在ConcurrentHashMap中,可以使用特定key获取一个集合。具体的操作是通过调用ConcurrentHashMap的get方法获取对应key,然后对该进行操作。如果该是一个集合类型,可以使用集合的相关方法进行操作,例如添加、删除、遍历等。 下面是一个示例代码: ```java import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; public class ConcurrentHashMapExample { public static void main(String[] args) { ConcurrentHashMap<String, CopyOnWriteArrayList<String>> map = new ConcurrentHashMap<>(); // 添加元素到集合 CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>(); list.add("element1"); list.add("element2"); map.put("key", list); // 获取集合并进行操作 CopyOnWriteArrayList<String> collection = map.get("key"); if (collection != null) { // 对集合进行操作 collection.add("element3"); collection.remove("element1"); for (String element : collection) { System.out.println(element); } } } } ``` 上述代码中,我们创建了一个ConcurrentHashMap对象,并将一个CopyOnWriteArrayList作为存储在指定key上。然后,我们通过get方法获取key对应的集合,并对集合进行操作,例如添加元素、删除元素和遍历元素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值