【问题标题】:Find unique value from the array and sort the array从数组中查找唯一值并对数组进行排序
【发布时间】:2015-10-29 09:35:42
【问题描述】:

我有一个数组。我想找到 fk_section_id 的唯一值以及与之关联的其他字段(section_name 和 fk_section_id)。我还想按 fk_section_id 对这个数组进行排序。如何从原始数组中得到这个数组?

数组

 Array
(
[0] => Array
    (
        [fk_field_id] => 1
        [fk_section_id] => 1
        [section_order] => 1
        [field_order] => 1            
        [field_name] => Title
        [section_name] => Your Detail
        [fk_field_type_id] => 4
    )

[1] => Array
    (
        [fk_field_id] => 2
        [fk_section_id] => 1
        [section_order] => 1
        [field_order] => 2       
        [field_name] => Name
        [section_name] => Your Detail
        [fk_field_type_id] => 1
    )  

[2] => Array
    (
        [fk_field_id] => 3
        [fk_section_id] => 2
        [section_order] => 2
        [field_order] => 1       
        [field_name] => Road
        [section_name] => Address For Correspondence
        [fk_field_type_id] => 1
    )
)

预期输出

  Array
(
[0] => Array
    (           
        [fk_section_id] => 1
        [section_order] => 1         
        [section_name] => Your Detail            
    )

[1] => Array
    (           
        [fk_section_id] => 2
        [section_order] => 2           
        [section_name] => Address For Correspondence          
    )
)

我在下面尝试过

 $i=0;
    foreach($formFields as $val){
        $i++;
        $allSections[$i]['section_name'] = $val['section_name'];
        $allSections[$i]['fk_section_id'] = $val['fk_section_id'];
        $allSections[$i]['section_order'] = $val['section_order'];
    }

它给了

Array
(
[0] => Array
    (
        [section_name] => Your Detail
        [fk_section_id] => 1
        [section_order] => 1
    )

[1] => Array
    (
        [section_name] => Your Detail
        [fk_section_id] => 1
        [section_order] => 1
    ) 


[2] => Array
    (
        [section_name] => Address For Correspondence
        [fk_section_id] => 2
        [section_order] => 2
    )

)

【问题讨论】:

  • 只是循环查找重复项?你试过什么吗?
  • 您包括预期结果,但您能否也包括当前结果?或者你承认你自己还没有尝试过任何东西?那是一种糟糕的形式,我害怕。对我来说,解决方案似乎微不足道,但我认为最好在数据库中使用“智能”SQL 进行处理,而不是在执行愚蠢查询后摆弄 PHP 中的结果数组。

标签: php arrays sorting


【解决方案1】:

你可以试试这个:

$data = array(
    array(
        'fk_field_id' => 1,
        'fk_section_id' => 1,
        'section_order' => 1,
        'field_order' => 1,        
        'field_name' => 'Title',
        'section_name' => 'Your Detail',
        'fk_field_type_id' => 4,
    ),
    array(
        'fk_field_id' => 2,
        'fk_section_id' => 1,
        'section_order' => 1,
        'field_order' => 2,        
        'field_name' => 'Name',
        'section_name' => 'Your Detail',
        'fk_field_type_id' => 1,
    ),
);

$temp = array();

foreach($data as $key => $value) { //Make an new array using fk_field_id as key
    if (!in_array($value['fk_field_id'], $temp)) {
        $temp[$value['fk_field_id']] = $value;
    }
}
ksort($temp); //Sort the array by key

var_dump($temp);

结果:

array (size=2)
  1 => 
    array (size=7)
      'fk_field_id' => int 1
      'fk_section_id' => int 1
      'section_order' => int 1
      'field_order' => int 1
      'field_name' => string 'Title' (length=5)
      'section_name' => string 'Your Detail' (length=11)
      'fk_field_type_id' => int 4
  2 => 
    array (size=7)
      'fk_field_id' => int 2
      'fk_section_id' => int 1
      'section_order' => int 1
      'field_order' => int 2
      'field_name' => string 'Name' (length=4)
      'section_name' => string 'Your Detail' (length=11)
      'fk_field_type_id' => int 1

现在你也可以使用:

echo $temp[1]['field_name'];

结果:

Title

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-14
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 2019-09-28
    • 2022-11-12
    • 1970-01-01
    相关资源
    最近更新 更多