Как преобразовать подмассив в массив без повторения значения массива с помощью php - PullRequest
0 голосов
/ 25 сентября 2018
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 голосов
/ 25 сентября 2018

Сделав изменения, я исправил это,

$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] => Array ([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"
)
0 голосов
/ 25 сентября 2018

Это можно сделать с помощью цикла 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);
0 голосов
/ 25 сентября 2018

Это функция, которая разрешает то, что вы спрашиваете, хотя я не уверен, что было бы полезно иметь одинаковые значения и ключи.Я просто перебираю все гендеры и добавляю в возвращаемый массив только те, которые еще не сохранены.вероятно, немного опасно с вашим кодом, потому что он чувствителен к регистру

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;
}
0 голосов
/ 25 сентября 2018

Я не совсем понимаю, как результирующий массив имеет какой-либо смысл, но вот вы:
Цикл по массиву, цикл по жанрам и перемещение элементов в новый массив.

<code><?
$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 "
";// output: Array ([History] => History [Drama] => Drama [Thriller] => Триллер [ACTION] => ACTION)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...