You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何过滤PHP多维数组,按position规则与priority优先级生成新数组

PHP多维数组按规则过滤实现

需求规则

现有按Page ID(如32、143)分组的多维数组,需按照以下规则过滤生成新数组:

  • 若分组下元素的position键存在值为both的项,直接忽略所有值为prepend、append的项,仅保留position值为both的项
  • 若分组下没有position值为both的项,存在多个prepend和append类型的项时,按priority键的值取优先级最高的对应项

原数组结构

$sort_result = Array
(
    [32] => Array
        (
            [0] => Array
                (
                    [page] => 32
                    [position] => append
                    [priority] => 1
                )

            [1] => Array
                (
                    [page] => 32
                    [position] => append
                    [priority] => 2
                )

            [2] => Array
                (
                    [page] => 32
                    [position] => prepend
                    [priority] => 3
                )

            [3] => Array
                (
                    [page] => 32
                    [position] => both
                    [priority] => 3
                )

            [4] => Array
                (
                    [page] => 32
                    [position] => prepend
                    [priority] => 4
                )

        )

    [143] => Array
        (
            [0] => Array
                (
                    [page] => 143
                    [position] => prepend
                    [priority] => 19
                )
            [1] => Array
                (
                    [page] => 143
                    [position] => prepend
                    [priority] => 18
                )
            [2] => Array
                (
                    [page] => 143
                    [position] => append
                    [priority] => 18
                )

        )

)

最初的错误实现代码

<?php 
foreach ( $modify_array as $key => $value ) {
    foreach( $value as $k1 => $v1) {
        if ( array_search( "both", $v1 ) ) {
            $final_array[$key][$k1] = $v1;
        } else{
            if ( array_search( "prepend", $v1 ) ) {
                $final_array[$key][$k1] = $v1;
            }
            if ( array_search( "append", $v1 ) ) {
                $final_array[$key][$k1] = $v1;
            }
           
        }
     break;
    }
}

期望输出结构

Array
(
    [32] => Array
        (
            
            [3] => Array
                (
                    [page] => 32
                    [position] => both
                    [priority] => 3
                )

        )

    [143] => Array
        (
            [1] => Array
                (
                    [page] => 143
                    [position] => prepend
                    [priority] => 18
                )
            [2] => Array
                (
                    [page] => 143
                    [position] => append
                    [priority] => 18
                )

        )

)

更新1:调试完成的可运行代码

$modify_array = array();
foreach ( $sort_result as $sort_result_key => $sort_result_value ) {  
    $modify_array[$sort_result_value['page']][] = $sort_result_value;
}

foreach ( $modify_array as $key => $value ) {

    $filter_array[$key]['both_yes'] = array_keys(array_column($value, 'position'),'both');
    $filter_array[$key]['prepend_yes'] = array_keys( array_column($value, 'position'),'prepend');
    $filter_array[$key]['append_yes'] = array_keys(array_column($value, 'position'),'append');

} 
    

foreach ( $filter_array as $filter_array_key => $filter_array_value ) {
    if ( ! empty( $filter_array_value['both_yes'])) {
        $a = $filter_array_value['both_yes'][0];
        $final_array[] = $modify_array[$filter_array_key][$a];
        
    } else {
        if ( ! empty( $filter_array_value['prepend_yes'])) {
            $b = $filter_array_value['prepend_yes'][0];
            $final_array[] = $modify_array[$filter_array_key][$b];
        }
        if ( ! empty( $filter_array_value['append_yes'])) {
            $c = $filter_array_value['append_yes'][0];
            $final_array[] = $modify_array[$filter_array_key][$c];
        }
    }
}

更新2:var_export输出的原数组

array ( 32 => array ( 0 => array ( 'page' => '32', 'position' => 'append', 'priority' => '1', ), 1 => array ( 'page' => '32', 'position' => 'append', 'priority' => '2', ), 2 => array ( 'page' => '32', 'position' => 'prepend', 'priority' => '3', ), 3 => array ( 'page' => '32', 'position' => 'both', 'priority' => '3', ), 4 => array ( 'page' => '32', 'position' => 'prepend', 'priority' => '4', ), ), 143 => array ( 0 => array ( 'page' => '143', 'position' => 'prepend', 'priority' => '18', ), 1 => array ( 'page' => '143', 'position' => 'append', 'priority' => '18', ), 2 => array ( 'page' => '143', 'position' => 'prepend', 'priority' => '19', ), ), )

内容的提问来源于stack exchange,提问作者Parthavi Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 15:24:07