我无法通过Key'公司'的关键重复值来重新排列阵列。并使其成为值,以便在下面的代码中重新排列:
原始阵列:
$array = array(
'number' => 2,
'items' =>
array(
'Company' => 'ABC',
'First' => 'John',
'Last' => 'Doe',
),
array(
'Company' => 'ABC',
'First' => 'Jane',
'Last' => 'Doe',
),
array(
'Company' => 'XYZ',
'First' => 'Peter',
'Last' => 'Pumpkin',
),
);
我想在'公司'上重新排序数组。价值并使其成为关键,如下例所示:
$array = array(
'number' => 2,
'items' =>
array(
'ABC' =>
array(
'First' => 'John',
'Last' => 'Doe'),
array(
'First' => 'Jane',
'Last' => 'Doe'),
'XYZ' =>
array(
'First' => 'Peter',
'Last' => 'Pumpkin'),
)
);
我在PHP Docs中看了很多,所以这似乎是一种独特的排序类型。
答案 0 :(得分:1)
$array = array(
'number' => 2,
'items' => array(
array(
'Company' => 'ABC',
'First' => 'John',
'Last' => 'Doe',
),
array(
'Company' => 'ABC',
'First' => 'Jane',
'Last' => 'Doe',
),
array(
'Company' => 'XYZ',
'First' => 'Peter',
'Last' => 'Pumpkin',
)
)
);
$final = $array;
$final['items'] = array();
foreach ($array['items'] as $item) {
$final['items'][$item['Company']] = $item;
unset($final['items'][$item['Company']]['Company']);
}
var_dump($final);
结果:
array (size=2)
'number' => int 2
'items' =>
array (size=2)
'ABC' =>
array (size=2)
'First' => string 'Jane' (length=4)
'Last' => string 'Doe' (length=3)
'XYZ' =>
array (size=2)
'First' => string 'Peter' (length=5)
'Last' => string 'Pumpkin' (length=7)
答案 1 :(得分:0)
您可以通过循环原始数组来构造所需的数组。
顺便说一句,我认为你打算放另一个数组()来保存所有项目。
$array = array(
'number' => 2,
'items' =>
array(//I assume this was missing in your original Question
array(
'Company' => 'ABC',
'First' => 'John',
'Last' => 'Doe',
),
array(
'Company' => 'ABC',
'First' => 'Jane',
'Last' => 'Doe',
),
array(
'Company' => 'XYZ',
'First' => 'Peter',
'Last' => 'Pumpkin',
),
)
);
$newarray = array();
foreach ($array['items'] as $key=>$val){
$company = $val['Company'];
if (empty($newarray[$company])){
//set a new key to hold our data
$newarray[$company] = array();
}
// because $val contains 'Company', we want to get rid of it
unset($val['Company']);
// add the current item under the company key
$newarray[$company][] = $val;
}
$array['items'] = $newarray;
print_r($array);
我看到CodeGodie刚回答了一个更短的版本。 :)