簡體   English   中英

PHP 遞歸數組搜索

[英]PHP recursive array_search

從下面的代碼中,我可以比較 2 arrays 並找出$array中的$subset元素 position 范圍。

$array = [8,2,3,7,4,6,5,1,9];
$subset = [6,3,7];

function get_range($array, $subset)
{
    $min = sizeof($array);
    $max = 0;
    
    foreach($subset as $value) {
        $occurrence = array_search($value, $array);
        if( $occurrence < $min ) {
            $min = $occurrence;
        }
        if( $occurrence >  $max ) {
            $max = $occurrence;
        }
    }
    
    return [$min, $max];
}
$range = get_range($array, $subset);  // result as an array -> [2, 5]

但是,我想對我的多維數組進行遞歸array_search ,例如:

$subset =  array (
  array(6,3,7),
  array(4,2,9),
  array(3,5,6),
);

我怎樣才能做到這一點? 預期結果 -> [2, 5], [1, 8], [2, 6]

這里不需要遞歸,只需在get_range() function 中添加一個額外的loop 以下示例基於您的代碼,是您問題的可能解決方案:

<?php
$array = [8,2,3,7,4,6,5,1,9];
$subsets =  array (
  array(6,3,7),
  array(4,2,9),
  array(3,5,6),
);

function get_range($array, $subsets)
{
    $result = array();
    foreach ($subsets as $subset) {
        $min = sizeof($array);
        $max = 0;
        foreach($subset as $value) {
            $occurrence = array_search($value, $array);
            if( $occurrence < $min ) {
                $min = $occurrence;
            }
            if( $occurrence >  $max ) {
                $max = $occurrence;
            }
        }
        $result[] = [$min, $max];
    }
    
    return $result;
}

$range = get_range($array, $subsets);
echo print_r($range, true);
?>

結果:

Array ( 
    [0] => Array ( [0] => 2 [1] => 5 ) 
    [1] => Array ( [0] => 1 [1] => 8 ) 
    [2] => Array ( [0] => 2 [1] => 6 ) 
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM