来自Multidimensional array()的array_diff_assoc()值

时间:2016-07-16 23:40:00

标签: php arrays

我有这个带有for循环的多维数组,我用它来分解函数中的某个数字。

但是我也想使用array_diff_assoc()来获取差异。

for ($i1 = 0; $i1 <= 9; $i1++) {

    $scale_0_to_9[$i1];

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

        if(strlen($value) != '3') {

            $value = '';
            $scale_0_to_9[$key]['9'] = $value;
            $scale_0_to_9[$key]['8'] = $value;
            $scale_0_to_9[$key]['7'] = $value;
            $scale_0_to_9[$key]['6'] = $value;
            $scale_0_to_9[$key]['5'] = $value;
            $scale_0_to_9[$key]['4'] = $value;
            $scale_0_to_9[$key]['3'] = $value;
            $scale_0_to_9[$key]['2'] = $value;
            $scale_0_to_9[$key]['1'] = $value;
            $scale_0_to_9[$key]['0'] = $value;
        }else {
            $num_0 = substr_count($value,'0');
            $num_1 = substr_count($value,'1');
            $num_2 = substr_count($value,'2');
            $num_3 = substr_count($value,'3');
            $num_4 = substr_count($value,'4');
            $num_5 = substr_count($value,'5');
            $num_6 = substr_count($value,'6');
            $num_7 = substr_count($value,'7');
            $num_8 = substr_count($value,'8');
            $num_9 = substr_count($value,'9');

            $scale_0_to_9[$key]['9'] = $num_9;
            $scale_0_to_9[$key]['8'] = $num_8;
            $scale_0_to_9[$key]['7'] = $num_7;
            $scale_0_to_9[$key]['6'] = $num_6;
            $scale_0_to_9[$key]['5'] = $num_5;
            $scale_0_to_9[$key]['4'] = $num_4;
            $scale_0_to_9[$key]['3'] = $num_3;
            $scale_0_to_9[$key]['2'] = $num_2;
            $scale_0_to_9[$key]['1'] = $num_1;
            $scale_0_to_9[$key]['0'] = $num_0;
        }
    }
}

我有这个,但它没有用。

array_diff_assoc(
    $scale_0_to_9['0'], $scale_0_to_9['1'],
    $scale_0_to_9['2'], $scale_0_to_9['3'],
    $scale_0_to_9['4'], $scale_0_to_9['5']
)

我试图比较$scale_0_to_9内的数组并找到至少2个相似度最高的数组。

但它不必以$scale_0_9['0']为起点。

例如,如果$scale_0_9['2']!= $scale_0_9['8']具有不同的值,则可以使用。

只要他们没有相同的价值观。

我需要知道['2'] $key,因为我需要将两个具有不同值的两者相匹配。

2 个答案:

答案 0 :(得分:0)

call_user_func_array('array_diff_assoc',$scale_0_to_9['1']);

答案 1 :(得分:0)

您想要的比较很复杂,而且您的结果定义不明确。在OP中你说明了

  

我试图比较$ scale_0_to_9中的数组并找到   至少2个最相似的。

稍后:

  

例如,如果$ scale_0_9 [&#39; 2&#39;]!= $ scale_0_9 [&#39; 8&#39;]有不同   价值也可以。只要他们没有相同的价值观。

在评论中添加:

  

理想的是他们有完全不同的价值观。但那里   将是他们可能分享共同价值的实例   每个$ scale_0_9 [&#39; x&#39;]

中最多应出现1次值

你想要的东西太难以确定。也就是说,我重写了你发布的内容,使其更加简单。您if(strlen($value)!='3'周围第一大代码块中的所有内容都可以修剪为几行:

$digits = ['0','1','2','3','4','5','6','7','8','9'];

if(strlen($value)!==3){
    //store in each key, an empty string
    foreach ($digits as $d){$scale_0_to_9[$key][$d] = '';}
}else{
    foreach ($digits as $d){
        //store in each key, the # of times the matching digit
        //appears in value
        $scale_0_to_9[$key][$d] = substr_count($value,$d);
    }
}