微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Laravel Collection上混合数组

如何解决在Laravel Collection上混合数组

我有一个看起来像下面的代码的数组:

$arr = ["a","b","c",1,2,3,4,5,6];

我将Laravel Collection用于此数组,因此代码如下:

$collect = collect($arr);

我尝试使用以下代码,但仍给出相同的数组:

$return_arr = [];
    $return_arr = $collect->each(function($item) {
                if(!empty($return_arr)) {
                    if(gettype($item) == gettype($newArr[count($newArr) - 1]) ) 
                    {
                        return false;
                    } else {
                        return $item;
                    }
                } else {
                    return $item;
                }
            });

而且,我也尝试过使用手动的foreach循环,例如以下代码,但它不会返回所有元素:

$return_arr = [];

foreach ($arr as $item) {
    if(!empty($return_arr)) {
        if(gettype($return_arr[count($return_arr) - 1]) == gettype($item)) {
            continue;
        } else {
            $return_arr[] = array_push($return_arr,$item);
        }
    } else {
        $return_arr[]= array_push($return_arr,$item);
    }
}
print_r($return_arr);
// return Array ( [0] => a [1] => 1 [2] => b [3] => 3 [4] => c [5] => 5 )

我想要的是返回具有数组值的新集合,如下所示:

$return_arr = ["a",6];

你们能帮我吗

预先感谢

解决方法

如果您要根据项目的类型来插入项目,则可以尝试:

$collection = collect($array)->groupBy(function ($value) {
    return gettype($value);
});

$interleaved = $collection->first()->zip($collection->last())->flatten()->filter();

这将:

  1. 按类型分组项目
  2. 采用第一个组并将其与最后一个组压缩(假设您正好有两个组)
  3. 然后它将平整结果并过滤出空值

注意:您可能需要添加检查以确定字符串组是第一个字符串还是最后一个字符串组,并进行相应的调整。

,

如果您正在寻找一种将集合内容随机排列为随机集的方法,请尝试使用shuffle()方法,如下所示:

$arr = ["a","b","c",1,2,3,4,5,6];
$collection = collect($arr);

$shuffled = $collection->shuffle();

$mixed_array = $shuffled->all();

这将为您提供以下输出:

=> ["b",5"c","a",6,]
,

它很脏,但是您可以尝试:

use Illuminate\Support\Arr;

$array = ["a",2];
//split strings and integers
$string = Arr::where($array,function ($value,$key) {
  return is_string($value);
});

$integer = Arr::where($array,$key) {
  return is_int($value);
});

$integer = array_values($integer);
$combine = [];
foreach (array_values($string) as $key => $value) {
    $combine[] = $value;
    if(array_key_exists($key,$integer)){
        $combine[] = $integer[$key];
        unset($integer[$key]);
    }
}
$combine = array_merge($combine,$integer);
//["a","c"]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。