построит в массив нужные параметры php

M9
На сайте с 15.05.2014
Offline
79
1036

Друзья как пробежаться циклом по одному массиву и собрать так, как необходимо в другой например сделать из такой массив:


$massive = array(
'0' => array('propertyname' => 'цвет','value' => 'red'),
'1' => array('propertyname' => 'версия', 'value' => 'android')
'2' => array('propertyname' => 'версия', 'value' => 'ios')
);

такой:


$result = array(
'цвет' => array('value' => 'red'),
'версия' => array('0' => 'android','1' => 'ios')
);
Dim_K
На сайте с 11.07.2007
Offline
85
#1


$massive = array(
array('propertyname' => 'цвет','value' => 'red'),
array('propertyname' => 'версия', 'value' => 'android'),
array('propertyname' => 'версия', 'value' => 'ios')
);
$result = array();
foreach($massive as $i) {
if (!$result[$i['propertyname']])
$result[$i['propertyname']] = array();
array_push($result[$i['propertyname']], $i['value']);
}
print_r($result);

Array
(
[цвет] => Array
(
[0] => red
)

[версия] => Array
(
[0] => android
[1] => ios
)

)
danforth
На сайте с 18.12.2015
Offline
153
#2

Dim_K, да, вот только первый массив ваш с цветом индексированный, а не ассоциативный, посмотрите внимательнее что ТС на выходе хотел получить.

Ваш пример вообще пишется одной строкой, вы там понаписывали лишнего. Зачем array_push? И зачем проверять на наличие ключа?


foreach($massive as $element) {
$tmp[$element['propertyname']][] = $element['value'];
}

Array

(
[цвет] => Array
(
[0] => red
)

[версия] => Array
(
[0] => android
[1] => ios
)

)

Update

<?php


$massive = array(
'0' => array('propertyname' => 'цвет','value' => 'red'),
'1' => array('propertyname' => 'версия', 'value' => 'android'),
'2' => array('propertyname' => 'версия', 'value' => 'ios'),
);

function magicForeach(array $array) {
$result = [];

$tmp = [];
foreach($array as $element) {
$tmp[$element['propertyname']]++;
}

unset($element);
foreach($array as $element) {
if ($tmp[$element['propertyname']] === 1) {
$result[$element['propertyname']] = ['value' => $element['value']];
} else {
$result[$element['propertyname']][] = $element['value'];
}

}
return $result;
}

$result = magicForeach($massive);
echo '<pre>';
print_r($result);

Array

(
[цвет] => Array
(
[value] => red
)

[версия] => Array
(
[0] => android
[1] => ios
)

)
Junior Web Developer
M9
На сайте с 15.05.2014
Offline
79
#3

Спасибо помогло.

---------- Добавлено 27.01.2017 в 20:36 ----------

А для чего нужен

unset($element);
S
На сайте с 30.09.2016
Offline
469
#4
mega94:
А для чего нужен

Товарищ перестраховывается.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий