如果重复,PHP会抑制部分数组

时间:2015-10-01 20:23:29

标签: php foreach

我有一组数据库对象,我使用foreach()来显示名称和项目。好的,现在客户不希望当一个人有多个项目时重复名称。这与变量范围有关,这是我试图将此特技拉下来的失败。这是对象数组的部分var_dump。

array [
0 => {
  ["lastName"]=>
  string(1) "w"
  ["projectName"]=>
  string(29) "Bone density scanner analysis"
}
1 => {
  ["lastName"]=>
  string(1) "w"
  ["projectName"]=>
  string(29) "analysis of foot"
}
]

我最终想要的是:

array [
0 => {
  ["lastName"]=>
  string(1) "w"
  ["projectName"]=>
  string(29) "Bone density scanner analysis"
}
1 => {
  ["lastName"]=>
  string(1) ""
  ["projectName"]=>
  string(16) "analysis of foot"
}
]

以下是我认为似乎不起作用的内容:

function suppress_name($name){
  global $string; 
  return ($name == $string) ? '' : $string;
}

function overall() {
  //$result = database call to get objects
  foreach ($result as $item) {
  $string = $item->lastName;
  $rows = array('Name' => suppress_name($item->lastName), 'project' => $item->projectName);
}
}

研究我看到了几个对array_unique()的引用,我将其用于扁平数组,但我看不出它会对我有所帮助。好吧,我以为我可以像上面那样创建一个函数来处理重复项并使用$ global但是我认为我并没有理解如何在这个实例中使用全局变量。我很高兴能够指出更好的方式或更好的搜索条件。这有意义吗?

2 个答案:

答案 0 :(得分:1)

这是一种可能的解决方案,我们将姓氏存储在一维数组中,然后通过数组的每次迭代检查它。如果lastName在数组中,则将值设置为''

请注意使用引用(&)。

<?php
$arrays = array(
    array('lastName' => 'w', 'projectName' => 'Bone density scanner analysis'),
    array('lastName' => 'w', 'projectName' => 'analysis of foot')
);
$last_names = array();

foreach($arrays as &$array){
    if( in_array($array['lastName'],$last_names) ){
        $array['lastName'] = '';
    }else{
        $last_names[] = $array['lastName'];
    }
}

echo '<pre>',print_r($arrays),'</pre>';

答案 1 :(得分:0)

使用嵌套数组会更容易

var svc = myFactory();
$scope.NumDen = svc.query();