PHP过滤对象数组并返回新的对象数组,同时根据一个属性

时间:2018-02-19 14:01:13

标签: php arrays laravel api filter

我有8k左右的对象数组,它们都有一个属性phase,我试图过滤掉重复的阶段。我正在尝试array_unique,但我似乎无法做到这一点。这是对象的片段:

array [
0 => {#525
    "street_address1": "Some St. 1"
    "street_address2": null
    "phase": "101"
    "sales_rep": "164"
    "id": "abd90d6b-28a8-2be6-d6c1-abd9007aef38"
    "name": "48TH ST E"
    "block_minimum": 400
    "block_maximum": 498
    "side": 2
  }
  1 => {#527
    "street_address1": "Some St. 2"
    "street_address2": null
    "phase": "101"
    "sales_rep": "164"
    "id": "abd90d6b-28a8-2be6-d6c1-abd9007aef38"
    "name": "48TH ST E"
    "block_minimum": 401
    "block_maximum": 499
    "side": 1
  }
  2 => {#580
    "street_address1": "Some St. 3"
    "street_address2": null
    "phase": "103"
    "sales_rep": "164"
    "id": "a1d58c9c-6ba7-ebc6-8a74-a1d5806e0bcf"
    "name": "11TH AVE S"
    "block_minimum": 4700
    "block_maximum": 4798
    "side": 2
  }
  3 => {#528
    "street_address1": "Some St. 4"
    "street_address2": null
    "phase": "103"
    "sales_rep": "164"
    "id": "a1d58c9c-6ba7-ebc6-8a74-a1d5806e0bcf"
    "name": "11TH AVE S"
    "block_minimum": 4700
    "block_maximum": 4798
    "side": 2
  }
]

这将是后端api GET返回。我有一个方法从数据库获取所有地址,然后需要过滤并只返回唯一的阶段。我还要补充一点,我使用Laravel 5.4,虽然我没有看到任何帮助我的助手。

4 个答案:

答案 0 :(得分:1)

看一下https://laravel.com/docs/5.5/collections#method-unique,如果你不能在查询构建器中这样做,这似乎就是你需要过滤的东西。如果您可以在查询构建器中执行此操作,则更有效,因为您不需要处理这些8k行。

答案 1 :(得分:1)

好吧,我让这个工作,它完全适合我。感谢大家!

$phases = array();
    foreach ($salesRepAddresses as $address) {
        $phases[] = $address->phase;
    }
    $uniquePhases = array_unique($phases);

    return $uniquePhases;

答案 2 :(得分:0)

您需要使用array_column收集所有阶段,然后array_unique

试试这个:

$phases = array_column($array, 'phase');
$uniquePhases = array_unique($phases);

答案 3 :(得分:0)

php.net manual for array_unique()的评论部分,有一个确切的例子。如果您不理解它,或者它不起作用,请离开;)

  

为任何单个键索引创建唯一的多维数组。我   想为特定代码创建多维唯一数组

     

代码:我的数组是这样的,

<?php 
$details = array( 
    0 => array("id"=>"1", "name"=>"Mike",    "num"=>"9876543210"), 
    1 => array("id"=>"2", "name"=>"Carissa", "num"=>"08548596258"), 
    2 => array("id"=>"1", "name"=>"Mathew",  "num"=>"784581254"), 
); 
?> 
  

您可以为id,name或num等任何字段使其唯一。

     

我已经为此开发了这个功能:

<?php 
function unique_multidim_array($array, $key) { 
    $temp_array = array(); 
    $i = 0; 
    $key_array = array(); 

    foreach($array as $val) { 
        if (!in_array($val[$key], $key_array)) { 
            $key_array[$i] = $val[$key]; 
            $temp_array[$i] = $val; 
        } 
        $i++; 
    } 
    return $temp_array; 
} 
?> 
  

现在,从您的代码

中调用此函数      

这样的事,

<?php 
$details = unique_multidim_array($details,'id'); 
?>