Нужно смешать 2 массива определенным образом

443
10 марта 2017, 00:50

Есть 2 массива c названиями животных:

$m = array(5) {
  [0]=>
  string(13) "Panthera onca"
  [1]=>
  string(9) "Gray wolf"
  [2]=>
  string(12) "Bengal tiger"
  [3]=>
  string(10) "Brown bear"
  [4]=>
  string(22) "Aptenodytes patagonica"
}
$n = array(5) {
  [0]=>
  string(10) "Koala bear"
  [1]=>
  string(24) "Haliaeetus leucocephalus"
  [2]=>
  string(22) "Ailuropoda melanoleuca"
  [3]=>
  string(15) "Bos primigenius"
  [4]=>
  string(20) "Aptenodytes forsteri"
}

Случайно перемешайте между собой первые и вторые слова названий животных так, чтобы на выходе мы получили выдуманных, фантазийных животных. Название фантазийного животного должно начинаться с первого слова реального названия животного. Важно, чтобы каждый кусочек был использован и не повторялся более одного раза. Ничего страшного, если в результате перемешивания иногда будут получаться реальные животные. Вывести этих животных на экран.

Я не понимаю как это сделать. Уже 3 день ломаю голову. Хотя бы подскажите каким образом это можно реализовать. Заранее спасибо за ответы)

Answer 1
<?php
$m = [
    "Panthera onca", 
    "Gray wolf",
    "Bengal tiger",
    "Brown bear",
    "Aptenodytes patagonica"
];
$n = [
    "Koala bear",
    "Haliaeetus leucocephalus",
    "Ailuropoda melanoleuca",
    "Bos primigenius",
    "Aptenodytes forsteri"
];
$a_1 = [];
$a_2 = [];
$out = [];
foreach (array_merge($m, $n) as $item) {
    $tmp = explode(' ', $item);
    $a_1[] = $tmp[0];
    $a_2[] = $tmp[1];
}
shuffle($a_1);
shuffle($a_2);
for ($i = 0, $j = count($a_1); $i < $j; $i++) {
    $out[] = $a_1[$i] .' '. $a_2[$i];
}
var_dump($out);
Answer 2

Сделал тоже самое что и @Эдуард но немного иначе)

$m = [
    "Panthera onca", 
    "Gray wolf",
    "Bengal tiger",
    "Brown bear",
    "Aptenodytes patagonica"
];
$n = [
    "Koala bear",
    "Haliaeetus leucocephalus",
    "Ailuropoda melanoleuca",
    "Bos primigenius",
    "Aptenodytes forsteri"
];
$animals = array_merge($m, $n);
$names = array_map(function($a){return explode(' ', $a)[0];}, $animals);
$types = array_map(function($a){return explode(' ', $a)[1];}, $animals);
shuffle($names);
shuffle($types);
$random_result=array();
for($i=0; $i< sizeof($animals); $i++){
    array_push($random_result, $names[$i]." ".$types[$i]);
}
print_r($random_result);
READ ALSO
Сортировка массивов php

Сортировка массивов php

Стала задача отсортировать массив, приходящий из БДОдин элелемент из этого массива выглядит так:

246
Добавить CDATA в xml?

Добавить CDATA в xml?

Как в первом случае обновить в элементе offer_text секцию <![CDATA[ ]]> на содержимое переменной $text, а во втором добавить ее?

223
Валидация входящих данных Yii по integer

Валидация входящих данных Yii по integer

Вечер добрый, не получается сделать валидацию входящих данных в Yii2, в модели пишу правило, но вылетает исключение

260
Кнопка &ldquo;Назад&rdquo; и кнопка &ldquo;Загрузить ещё&rdquo; на Ajax

Кнопка “Назад” и кнопка “Загрузить ещё” на Ajax

В интернет-магазине на странице категории добавил сортировку товаров и кнопку "Загрузить ещё", но если нажать на товар, а потом на кнопку назад...

261