在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"]

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...