3

こんにちは私はphpにかなり慣れていません。

私は配列を持っています

$arr = array(0 => array('GID'=>1,'groupname'=>"cat1",'members'=>array(0=>array('mid'=>11,'mname'=>) 'wwww'),1=>array('mid'=>12,'mname'=>'wswww'))), 1 => array('GID'=>2,'groupname'=>"cat2", 'members'=>array(0=>array('mid'=>13,'mname'=>'gggwwww'),1=>array('mid'=>14,'mname'=>'wvvwww') )), 2 => array('GID'=>3,'groupname'=>"cat1",'members'=>array(0=>array('mid'=>15,'mname'=>'wwddsww) ')),1=>array('mid'=>16,'mname'=>'wwwdddw')));

      ie...,I have GID,groupname,mid(member id),mname(member name).I want to insert a new mid and mname into a group if it is already in the array ,if it is not exists then create a new subarray with these elements..I also need to check a member id(mid) is also present.........................I used the code but its not working fine............. if (!empty($evntGroup)) {


            foreach ($evntGroup as $k => $group) {

                if ($group['GID'] == $group_id) {
                    foreach($group as $j=> $mem){

                    if($mem['mid'] == $mem_id){

                        unset($evntGroup[$k]['members'][$j]['mid']);
                        unset($evntGroup[$k]['members'][$j]['mname']);
                    }
                    else{


                    $evntGroup[$k]['members'][] = array(
                        'mid' => $mem_id,
                        'mname' => $mem_name);

                    }}
                } else {


                    $evntGroup[] = array(
                        'GID' => $group_id,
                        'groupname' => $Group['event_group_name'],
                        'members' => array(
                            0 => array(
                                'mid' => $mem_id,
                                'mname' => $mem_name
                            )
                        )
                    );

                }

            }
        } else {

            $evntGroup[$i]['GID'] = $group_id;
            $evntGroup[$i]['groupname'] = $Group['event_group_name'];
            $evntGroup[$i]['members'][] = array(
                'mid' => $mem_id,
                'mname' => $mem_name);
            $i++;

        }
4

3 に答える 3

2

関数の形式では、最も簡単な解決策は次のようになります。

function isGidInArray($arr, $val) {
    foreach($arr as $cur) {
        if($cur['GID'] == $val)
            return true;
    }
    return false;
}

指定された GID が見つかった場合に何をしたいのかを指定するように質問を更新しましたが、それはループへの簡単な追加にすぎません。

function doSomethingIfGidInArray($arr, $val) {
    foreach($arr as $cur) {
        if($cur['GID'] == $val) {
            doSomething();
            break; //Assuming you only expect one instance of the passed value - stop searching after it's found
        }
    }
}

残念ながら、親配列内のすべての配列の同じインデックスを取得するネイティブ PHP 配列関数はありません。私はしばしばそのようなことを望んでいました。

于 2012-12-04T12:12:25.917 に答える
1

コードがあります

function updateByGid(&$array,$gid,$groupname,$mid,$mname) {
    //For each element of the array
    foreach ($array as $ii => $elem) {
        //If GID has the same value
        if ($elem['GID'] == $gid) {
            //Insert new member
            $array[$ii]['members'][]=array(
                        'mid'=>$mid,
                        'mname'=>$mname);
            //Found!
            return 0;
        }
    }       
    //If not found, create new
    $array[]=array(
            'GID'=>$gid,
            'groupname'=>$groupname,
            'members'=>array(
                0=>array(
                    'mid'=>$mid,
                    'mname'=>$mname
                )
            )
    );

    return 0;
}
于 2012-12-04T12:20:11.627 に答える
1

GID が 3 の場合、次のようなものが一致します。

foreach( $arr as $item ) {
  if( $item['GID'] == 3 ) {
     // matches
  }
}
于 2012-12-04T12:13:26.947 に答える