如何在不使用php重复数组值的情况下将子数组转换为数组

时间:2018-09-25 09:05:05

标签: php arrays multidimensional-array

Array
(
    [0] => Array
    (
        [id] => 21153
        [genre] => ["History","Drama", "Thriller"]
    )

    [1] => Array
    (
        [id] => 21152
        [genre] => ["ACTION"]
    )

    [2] => Array
    (
        [id] => 21151
        [genre] => ["ROMANTIC"]
    )

    [3] => Array
    (
        [id] => 21150
        [genre] => ["Drama"]
    )

)

我在上面的数组中有一个数组,我想将该数组转换为唯一的数组,如下所述,并且应该有任何重复的值。

Array(
    [History] => "History"
    [ACTION] => "ACTION"
    [ROMANTIC] => "ROMANTIC"
    [Drama] => "Drama"
    [Thriller]=>"Thriller"
)

4 个答案:

答案 0 :(得分:0)

我真的不知道结果数组有什么意义,但是您在这里:
遍历数组,遍历流派并将项目推送到新数组。

<?
$a = Array
(
    [
        "id" => 21153,
        "genre" => ["History","Drama", "Thriller"]
    ],

    [        
        "id" => 21152,
        "genre" => ["ACTION"]
    ]

);


$result = [];
foreach($a as $b) {
    foreach($b['genre'] as $genre) {
        $result[$genre] = $genre;  // don't need to check if it exists already, because we'll overwrite it anyway.
    }
}

echo "<pre>";
print_r($result);
echo "</pre>";

// output:
Array
(
    [History] => History
    [Drama] => Drama
    [Thriller] => Thriller
    [ACTION] => ACTION
)

答案 1 :(得分:0)

可以使用如下所示的foreach()循环和in_array()函数来完成

$myArray=array();
$array = array(
            array("id"=>21153,"genre"=>array("History","Drama", "Thriller")),
            array("id"=>21152,"genre"=>array("ACTION")),
            array("id"=>21151,"genre"=>array("ROMANTIC")),
            array("id"=>21150,"genre"=>array("Drama"))          
        );

foreach($array as $arr){    
    foreach($arr as $genres){
        if(is_array($genres)){
            foreach($genres as $elem){
                  if (!in_array($elem, $myArray))
                  {
                    $myArray[$elem]=$elem;
                  }
            }
        }
    }
}

print_r($myArray);

答案 2 :(得分:0)

这是一个可以解决您的问题的函数,尽管我不确定让值和键完全相同是否很有用。我只是遍历所有性别,并仅将我尚未存储的性别添加到返回数组中。您的代码可能有点危险,因为它区分大小写

function getGenders(array $rawValues) :array {
    $distinctGenders = [];
    foreach ($rawValues as $row) {
        foreach ($row["genre"] as $gender) {
            if (!in_array($gender, $distinctGenders)) {
                $distinctGenders[$gender] = $gender;
            }
        }
    }

    return $distinctGenders;
}

答案 3 :(得分:0)

通过更改,我已经解决了这个问题,

$responseData = Array(
[0] => Array
    (
        [id] => 21153
        [genre] => ["History","Drama", "Thriller"]
    )

[1] => Array
    (
        [id] => 21152
        [genre] => ["ACTION"]
    )

[2] => Array
    (
        [id] => 21151
        [genre] => ["ROMANTIC"]
    )

[3] => Array
    (
        [id] => 21150
        [genre] => ["Drama"]
    )

       foreach ($responseData as $data){
       $strReplace = str_replace(array('[',']') , ''  ,  $data['genre']);
       $explodeData[] = explode(',', $strReplace);  
   }

爆炸后的输出为:

$explodeData = Array

(     [0] =>数组         (             [0] =>“历史记录”             [1] =>“戏剧”             [2] =>“惊悚片”         )

[1] => Array
    (
        [0] => "ACTION"
    )

[2] => Array
    (
        [0] => "ROMANTIC"
    )

[3] => Array
    (
        [0] => "Drama"
    )

最后是foreach循环:

       foreach ($explodeData as $arr) {
        foreach ($arr as $genres) {
            if (!in_array($genres, $myArray)) {
                $myArray[$genres] = $genres;
            }
        }
    }

最后所需的输出如下:

Array(
["History"] => "History"
["Drama"] => "Drama"
["Thriller"] => "Thriller"
["ACTION"] => "ACTION"
["ROMANTIC"] => "ROMANTIC"
)