Сравните значения и объедините

Как я могу объединить текстовые значения одного и того же значения pr?

Array (
[0] => Array ( [ID] => 1 [text] => text1 [pr] => project1)
[1] => Array ( [ID] => 2 [text] => text2 [pr] => project1)
[2] => Array ( [ID] => 2 [text] => text3 [pr] => project2)
[3] => Array ( [ID] => 2 [text] => text4 [pr] => project2)
[4] => Array ( [ID] => 2 [text] => text5 [pr] => project1)
)

Выход:

$newarray = array(
"project1" => "text1 | text2 | text5",
"project2" => "text3 | text4",
);

-1

Решение

Я бы сделал это так:

<?php

$array = Array(
0 => Array('ID' => 1, 'text' => 'text1', 'pr' => 'project1'),
1 => Array('ID' => 2, 'text' => 'text2', 'pr' => 'project1'),
2 => Array('ID' => 2, 'text' => 'text3', 'pr' => 'project2'),
3 => Array('ID' => 2, 'text' => 'text4', 'pr' => 'project2'),
4 => Array('ID' => 2, 'text' => 'text5', 'pr' => 'project1'),
);$newArray = [];

foreach ($array as $item) {
$newArray[$item['pr']][] = $item['text'];
}

foreach ($newArray as $k => $v) {
$newArray[$k] = implode(' | ', $v);
}var_dump($newArray);

Выход:

array (2) {[«project1»] => string (21) «text1 | text2 | text5» [«project2»] => string (13) «text3 | text4»}

2

Другие решения

Просто зациклите свой массив и создайте новый массив.

$newArray = [];

foreach ($myArray as $elements) {
if (isset($newArray[$elements['pr']])) {
$newArray[$elements['pr']] .= " | {$elements['text']}";
} else {
$newArray[$elements['pr']] = $elements['text'];
}

}
2

Это также гарантирует, что определенный текст добавляется только один раз для каждого проекта.

$newarray = array();

// Loop through the old array, set the current row to the $row variable
foreach($oldarray as $row)
{
// If the project doesn't yet exist in the new array, we create an empty array for it
if(!array_key_exists($row["pr"], $newarray))
{
$newarray[$row["pr"]] = array();
}

// We add the current text to the array of the project, but only if it is not already there
if(!in_array($row["text"], $newarray[$row["pr"]]))
{
$newarray[$row["pr"]][] = $row["text"];
}
}

// Loop through the new array, and stich the texts within the project-array together with the separator `|`
foreach($newarray as $k => $v)
{
$newarray[$k] = implode(" | ", $v);
}

Конечно, есть более короткие решения, в которых используются более сложные функции массива, но это легче понять. Примечание: код не проверен.

1
По вопросам рекламы [email protected]