duanlu2935 2013-01-16 08:52
浏览 19
已采纳

比较字符串和数组值

For e.g. we have string

$somestring = '11;11;11;12;13';

and array

    $somearray = array(
  11 => array(
    prop => array(0=>11),
    uid => 1,
  ),
  21 => array(
    prop => array(0=>12),
    uid => 2,
  ),
  32 => array(
    prop => array(0=>11),
    uid => 1,
  ),  
  34 => array(
    prop => array(0=>11),
    uid => 2,
  ),  
 35 => array(
    prop => array(0=>13),
    uid => 1,
  ),  
  36 => array(
    prop => array(0=>13),
    uid => 3,
  ),  
  37 => array(
    prop => array(0=>12),
    uid => 1,
  ),  
  38 => array(
    prop => array(0=>12),
    uid => 3,
  ),  
  39 => array(
    prop => array(0=>12),
    uid => 1,
  ),
);

How to get from $somearray [uid] on condition that value of [prop] is equal same value in $somestring and output it by filled rows like this:

row1:11(uid:1);11(uid:1);11(uid:2);12(uid:2);13(uid:1)
row2:11(uid:);11(uid:);11(uid:);12(uid:1);13(uid:3)
row3:11(uid:);11(uid:);11(uid:);12(uid:3);13(uid:)
row4:11(uid:);11(uid:);11(uid:);12(uid:1);13(uid:)

I found a bit reletive solution here http://eval.in/6816 but it is not dealing with repeated values

  • 写回答

2条回答 默认 最新

  • doutai1509 2013-01-16 10:08
    关注

    Just copy it and execute,

    <?php
    error_reporting(0);
    $somestring = '11;11;11;12;13';
    
    $somearray = array(
      11 => array(
        prop => array(0=>11),
        uid => 1,
      ),
      21 => array(
        prop => array(0=>12),
        uid => 2,
      ),
      32 => array(
        prop => array(0=>11),
        uid => 1,
      ),  
      34 => array(
        prop => array(0=>11),
        uid => 2,
      ),  
     35 => array(
        prop => array(0=>13),
        uid => 1,
      ),  
      36 => array(
        prop => array(0=>13),
        uid => 3,
      ),  
      37 => array(
        prop => array(0=>12),
        uid => 1,
      ),  
      38 => array(
        prop => array(0=>12),
        uid => 3,
      ),  
      39 => array(
        prop => array(0=>12),
        uid => 1,
      ),
    );
    
    $sme_array    = explode(";",$somestring);
    $somestrarray = array_unique($sme_array);
    $res          = array();
    foreach($somearray as $key=>$val){
    
        foreach($somestrarray as $value){
            if($val['prop'][0] == $value){
               $res[$value][]   = $val['uid'];
            }       
        }
    }
    
    $cnt_values  = array_count_values($somestrarray);
    
    $num_loop    = 1;
    foreach($cnt_values as $key=>$val){
      $num_loop  = (count($res[$key])/$val) > $num_loop?(count($res[$key])/$val):$num_loop;
    }
    
    for($i=0; $i<$num_loop; $i++){
        echo "row".($i+1).":";
        foreach($sme_array as $vals){
          if(array_key_exists($vals,$res)){
          echo $vals."(uid:".$res[$vals][0].");";
          array_shift($res[$vals]);
          }
        }
        echo "<br>";
    }
    
    
    ?>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序
  • ¥15 多址通信方式的抗噪声性能和系统容量对比
  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作