PHP : 合并具有相同元素的数组

PHP : merging array with same element

我需要一个新数组来合并所有 category_name 和相同的 exercise_name,即:

Array
    (
[0] => stdClass Object
    (

        [exercise_name] => Hang Clean
        [category_name] => Heavy,Pull,Core
    )

[1] => stdClass Object
    (

        [exercise_name] => Ice Skaters
        [category_name] => Ground,Lower,Plyometrics
    )

[2] => stdClass Object
    (

        [exercise_name] => Ice Skaters
        [category_name] => Basketball,Sport Specific
    )

)

输出:

Array
(
    [0] => stdClass Object
        (
            [exercise_name] => Hang Clean
            [multiple_category_name] => Array
                (
                    [0] => Heavy,Pull,Core
                )

        )

    [1] => stdClass Object
        (
            [exercise_name] => Ice Skaters
            [multiple_category_name] => Array
                (
                    [0] => Ground,Lower,Plyometrics
                    [1] => Basketball,Sport Specific
                )

        )

)

将所有 category_name 与相同 exercise_name 合并的最佳方法是什么?

有什么解决办法吗?

试试这个,

$new = array();
foreach($obj as $key=>$val {
   if($key == "exercise_name") {
     $key1 = $val;
   }

   if($key == "category_name") {
     $new[$key1] = $val;
   }


}

print_r($new);

这可能对您有所帮助

 [akshay@localhost tmp]$ cat test.php
 <?php 

 $array= array(
               (object)array("exercise_name" => "Hang Clean","category_name" => "Heavy,Pull,Core"),
               (object)array("exercise_name" => "Ice Skaters","category_name" => "Ground,Lower,Plyometrics"),
               (object)array("exercise_name" => "Ice Skaters","category_name" => "Basketball,Sport Specific")
              );


 function simple_merge($array)
 {

    foreach($array as $k)
    {
       if(isset($output[$k->exercise_name]))
       { 
           array_push($output[$k->exercise_name]->multiple_category_name,$k->category_name);    
       }else
       {    
           $k->multiple_category_name  = array($k->category_name);
           unset($k->category_name);
           $output[$k->exercise_name]  = $k;
       }        
    }

    return array_values($output);
 }


 // Input 
 print_r($array);

 // Output
 print_r(simple_merge($array));

 ?>

输出

 [akshay@localhost tmp]$ php test.php

 Array
 (
     [0] => stdClass Object
         (
             [exercise_name] => Hang Clean
             [category_name] => Heavy,Pull,Core
         )

     [1] => stdClass Object
         (
             [exercise_name] => Ice Skaters
             [category_name] => Ground,Lower,Plyometrics
         )

     [2] => stdClass Object
         (
             [exercise_name] => Ice Skaters
             [category_name] => Basketball,Sport Specific
         )

 )
 Array
 (
     [0] => stdClass Object
         (
             [exercise_name] => Hang Clean
             [multiple_category_name] => Array
                 (
                     [0] => Heavy,Pull,Core
                 )

         )

     [1] => stdClass Object
         (
             [exercise_name] => Ice Skaters
             [multiple_category_name] => Array
                 (
                     [0] => Ground,Lower,Plyometrics
                     [1] => Basketball,Sport Specific
                 )

         )

 )

试试这个功能,它一定会帮助你:

<?php
$obj = array(
        0 => (object)array(
                'exercise_name' => 'Hang Clean',
                'category_name' => 'Heavy,Pull,Core',
                ),
        1 => (object)array(
                'exercise_name' => 'Ice Skaters',
                'category_name' => 'Ground,Lower,Plyometrics',
                ),
        2 => (object)array(
                'exercise_name' => 'Ice Skaters',
                'category_name' => 'Basketball,Sport Specific',
                )

        );


/*-----------------------------------------------------------*/

        echo '<pre>';
        print_r(funcName($obj));

/*-----------------------------------------------------------*/



function funcName($obj) {   
        $results = array();
        foreach($obj as  $obj1){
            if(empty($results)){
                $results[] = (object)array(
                                'exercise_name' => $obj1->exercise_name,
                                'multiple_category_name' => array(
                                                        $obj1->category_name,
                                                    ),
                            );
            }else{
                $check = 0;
                foreach ($results as $key =>$result ){

                    if(trim($result->exercise_name) == trim($obj1->exercise_name)){
                        $check = 1;
                        $results[$key]->multiple_category_name[] = $obj1->category_name;
                        continue;
                    }
                }
                if($check == 0){
                    $results[] = (object)array(
                        'exercise_name' => $obj1->exercise_name,
                        'multiple_category_name' => array(
                                                $obj1->category_name,
                                            ),
                    );              
                }
            }       
        } 
        return $results;
}



?>