PHP Logic problem


  • Linux Help

    මම ගොඩක් උත්සහ කරා මේක විසදගන්න එත් බැරිඋන නිසයි Lankadevelopers එකේ දාන්න අදහස් කරේ .

    data array එකක් තියෙනවා (පල්ලෙහා මම දාන්නම්) මට ඕනේ මේ array එකේ _ (underscore ) එකෙන් දකුණු පැත්තේ තියෙන value එක key එක වෙලා වම් පැත්තේ තියෙන එක key එකේ values array එකක් විදියට තාම එන්න ඕනේ .

    <?php
    $permissions = ['create_user', 'edit_user', 'delete_user', 'create_post','edit_post', 'delete_post'];
    

    මම මේක හැදුවා එත් පොඩි අවුලක් තියෙනවා . key එක විදියට ගන්න values එක පේලියට අවොත් වැඩ කරනවා , එත් තැන මාරු වෙලා අවොත් වැඩ කරන්නේ නැ .
    ex :

    <?php
    $permissions = ['create_user', 'create_post','edit_post', 'delete_post', 'edit_user', 'delete_user'];
    

    මේ තියෙන්නේ මගේ code එක :

    <?php
    $permissions = ['create_user', 'edit_user', 'delete_user', 'create_post','edit_post', 'delete_post'];
    $permission_categories = [];
    $set = [];
            
    foreach ($permissions as $permission) {
       $name = explode("_", $permission);
    
        if (!array_key_exists($name[1], $permission_categories)) {
            $set = [];
            $permission_categories[$name[1]] = $name[0];
        }
    
        if (array_key_exists($name[1], $permission_categories)) {
             $set[] = [
                 $name[0]
             ];
             $permission_categories[$name[1]] = $set;
         }
    }
    print_r($permission_categories);
    exit();
    

    අන්තිමට එන්න ඕනේ output එක තමා :

    [
     'user' => ['create','edit', 'delete'],
     'post' => ['create','edit','delete']
    ]
    


  • Hope this is what you expect.
    Happy coding .. 🙂

    <?php
    $permissions = ['create_user', 'create_post','edit_post', 'delete_post', 'edit_user', 'delete_user'];
    $permission_categories = [];
    $set = [];
            
    foreach ($permissions as $permission) {
       $name = explode("_", $permission);
       $key = $name[1];
       $value = $name[0];
    
        if (!array_key_exists($key, $permission_categories)) {
            $permission_categories[$key] = [$value];
        }else{
             array_push($permission_categories[$key],$value);
             
         }
    }
    print_r($permission_categories);
    exit();
    

  • Linux Help

    @Emalsha Thank you very much, works as expected. thanks again.



  • <?php
    $permissions = ['create_user', 'create_post','edit_post', 'delete_post', 'edit_user', 'delete_user'];
    $permission_categories = [];
    
    foreach ($permissions as $value) {
        
        $name = explode("_", $value);
    
        # hasn't key
        if(!array_key_exists($name[1], $permission_categories)){
            $permission_categories[$name[1]] = [];
        }
    
        $permission_categories[$name[1]][] = $name[0];
    }
    
    
    print_r($permission_categories);
    

Log in to reply