能不能实现一个功能?让数组$arr里的元素依次和数组$arr2里的元素进行匹配,当和数组$arr2里的元素相匹配时,则显示该元素。否则显示为'-'。请问怎么做?$arr = Array
(
    '1' => bin1|0|0|0|1000|500|400|300|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0
    '2' => bin2|0|0|0|0|0|2000|1000|600|500|0|100|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0
)
//以上数组是假设的已获得的bin=>test item数组,肉眼可知bin1的1出现次数最多项为4,bin2为6
//以下为你本贴给出的类似数组。
$arr2 = array(
1=>array(2,4,6,7,8),//应显示为7
2=>array(3,5,6,10,22)// 应显示为-

解决方案 »

  1.   

    为什么第一个$arr2[1]里的数字会显示7呢?我有点没看明白还请lz赐教
      

  2.   

    意思是说$arr和$arr2里的元素要一样吗??
      

  3.   

    是$arr里面的元素和$arr2的元素相匹,$arr数组可看成是1-160个值。'1'=>bin1|这项可以忽略不计。
    类似于Array([0]=>0 [1]=>0 [2]=>0 ... [7]=>300 ... [160]=>0)
      

  4.   

    数组$arr下标值和$arr2的value相等。
      

  5.   

    哦原来是这样,我说怎么看了半天arr里面也没有7这一项呢。可是$arr中的bin2项好像应该不是6是5吧?2000|1000|600|500|100 我一共就看到这五项
      

  6.   

    bin2应该是6,不好意思,我写错了。
      

  7.   


    最后一个问题,问完后就可以开工了kaka
    你的$arr[1]或者[2]后面那一长串东西是已经放到数组里了还是仅仅是以string方式储存的一串
      

  8.   


    就比如说你的$arr格式是:$arr = array(
    [1]=>string(333)"bin1|0|0|0......."
    [2]=>string(336)"bin2|0|0|0......."
    )还是$arr = array(
    [1]=>array(**)([0] =>"bin1" [1] => 0.......)
    [2]=>array(**)([0] =>"bin2" [1] => 0.......)
    )
      

  9.   

    foreach($arr as $str)
    {
       $str = preg_replace("/([^\d])0|/","",$str."|");
       $len = substr_count($str,"|");
       $len -=2;
       if($len  < 0 || count($arr2) <= $len)
              echo "-";
        else
            echo $arr2[$len];}
      

  10.   

    foreach ($arr1 as $key => $value)
    {
    $nbr = array_count_values($arr1[$key]);
    $keys = count($arr1[$key]) - $nbr[0] - 2;
    if (!isset($arr2[$key][$keys]))
    echo "Error : -";
    else
    echo $arr2[$key][$keys];
    }
    俺是用另一种方法做的lz自己决定吧^^
      

  11.   

    $arr = array
    (
        '1' =>"bin1|0|0|0|1000|500|400|300|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0",
        '2' => "bin2|0|0|0|0|0|2000|1000|600|500|33|100|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0"
    );$arr2 = array(
    1=>array(2,4,6,7,8),//应显示为7
    2=>array(3,5,6,10,22)// 应显示为-
    );$arr1 = array(
      1=>explode('|', $arr[1]),
      2=>explode('|', $arr[2]),   
      );
      

  12.   

    回楼上的,我可能没有表述清楚。
    我的目的是$arr里面的元素按照数值从大到小进行排序,当有元素的序号($key)满足$arr2里面元素值的话,则显示出来匹配的最大的那个序号值,否则显示为空。我再举个例子吧:
    $arr = array 

        '1' =>"0|0|0|1000|500|400|300|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0", 
        '2' =>"0|0|50|100|5000|0|300|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0", 
        '3' => "0|0|0|0|0|0|0|0|0|0|100|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0" 
    ); $arr2 = array( 
    1=>array(2,4,6,7,8),//应显示为4,$arr最大值1000的那个键值为4,和数组$arr2中的值匹配。
    2=>array(2,4,6,7,8),//应显示为7,虽然$arr最大值是5000,但是它的键值5不和数组$arr2中的值匹配,接下来找$arr第二大的值和$arr2中的值进行匹配,结果为7 
    3=>array(3,5,6,10,22)// 应显示为-,$arr依次从大到小进行匹配,但是没有键值和$arr2的值相匹配,所以显示为空(null)。
    ); 
      

  13.   

    两个FOR循环得出explode之后的结果集,逆向的比较一下对应的值应该就差不多了吧~!<?php
    $arr = array 

        '1' =>"bin1|0|0|0|1000|500|400|300|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0", 
        '2' =>"bin2|0|0|50|100|5000|0|300|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0", 
        '3' => "bin3|0|0|0|0|0|0|0|0|0|0|100|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0" 
    ); 
    $arr1 = array( 
      1=>explode('|',$arr[1]), 
      2=>explode('|',$arr[2]), 
      3=>explode('|',$arr[3])
      );
      echo '结果集一:<br>';
      echo '<pre>';
    print_r($arr1);
    echo '</pre>';
    $num = count($arr);
    for ($i=1;$i<=$num;$i++)
    {
    $arr3[] = array(
    $i=>explode('|',$arr[$i]),
    );
    }
    for ($i=0;$i<count($arr3);$i++)
    {
    $new[]=$arr3[$i][$i+1];
    }
    $arr2 = array(
    1=>array(2,4,6,7,8),
    2=>array(3,5,6,10,22)
    );
    echo '结果集二:<br>';
    echo '<pre>';
    print_r($new);
    echo '</pre>';
    ?>
      

  14.   

    $new[0][2],$new[0][4],$new[0][6],$new[0][7],$new[0][8]之间比较
    以下同理,试试看吧。
      

  15.   

    对 $arr 重新排序的话, LZ不觉得有很大的运算量吗?
    建议从 $arr2 入手
      

  16.   

    foreach ($arr2 as $k2 => $v2) {
        $maxArray = array();
        
        foreach ($v2 as $getMaxValue) {
            $maxArray[$getMaxValue] = $arr[$k2][$getMaxValue - 1];
        }    $maxValue = max($maxArray);    if (isset($maxValue) && $maxValue !== 0) {
            echo array_search($maxValue, $maxArray);
        }
    }我在网吧写的,不知道对不对,LZ参考
      

  17.   

    foreach ($arr2 as $k2 => $v2) {
        $maxArray = array();
        
        foreach ($v2 as $getMaxValue) {
            $maxArray[$getMaxValue] = $arr[$k2][$getMaxValue - 1];
        }    $maxValue = max($maxArray);    if (isset($maxValue) && $maxValue !== 0) {
            echo array_search($maxValue, $maxArray);
        }
        else {
            echo 'null';
        }
    }