我需要将数组中的一些键值合并到一个新键=>值,但在同一个数组,我无法弄清楚如何。
所以我有这个数组:
array(
[title] => something
[status] => something
[url_1] => http://someurl.com
[url_2] => http://someurl.com
[url_3] => http://someurl.com
[url_4] => http://someurl.com
)
我需要一个像这样的数组:
array(
[title] => something
[status] => something
[all_url] => http://someurl.com,http://someurl.com,http://someurl.com,http://someurl.com
)
哦,如果url_2,url_3,url_4为空,请不要将分隔符放在url_1之后,当然如果url_1为空则不要将分隔符放在url_2之前
答案 0 :(得分:1)
您可以使用implode
功能。如果您将url部分作为另一个数组,则可以轻松地创建如下字符串:
$all_url = implode(',', $url_parts);
内爆功能仅在需要时添加分隔符。如果url部分总是成为主数组的一部分,你可以这样做:
$temp_arr = array();
$i = 1;
while($temp_url = $array[url_{$i}]){
$temp_arr[] = $temp_url;
unset($array[url_{$i}]);
$i++;
}
$array[all_url] = implode(',', $temp_arr);
答案 1 :(得分:1)
试试这个
<?php
$param = array(
'title' => 'something',
'status' => 'something',
'url_1'=> 'http://someurl.com',
'url_2' => 'http://someurl.com',
'url_3' => 'http://someurl.com',
'url_4' => 'http://someurl.com',
);
$meta = array('title','status');
$metas = array_intersect_key(array_flip($meta),$param);
$metas['all_url'] = implode(',', array_diff_key($param, array_flip($meta)));
var_export($metas);
答案 2 :(得分:0)
$yourArray['all_url'] = implode(',', array(
$yourArray['url_1'],
$yourArray['url_2'],
$yourArray['url_3'],
$yourArray['url_4'],
));
unset($yourArray['url_1'], $yourArray['url_2'], $yourArray['url_3'], $yourArray['url_4'])
var_dump($yourArray):
或者如果你想让它更具可扩展性:
function mergeUrls($inputArray, $filter = 'url_')
{
$urls = array();
foreach($inputArray as $key => $value) {
if (strpos($value, $filter) !== 0) {
continue;
}
$urls[] = $value;
unset($inputArray[$key]);
}
$inputArray['all_urls'] = implode(',', $urls);
return $inputArray;
}
答案 3 :(得分:0)
也试试这个:
$data = array(
'title' => 'something',
'status' => 'something',
'url_1' => 'http://someurl.com',
'url_2' => 'http://someurl.com',
'url_3' => 'http://someurl.com',
'url_4' => 'http://someurl.com',
);
$array1 = array();
$string = "";
foreach ($data as $key => $value)
if (substr($key, 0, 4) == "url_")
$string = $string . $value . ",";
else
$array1[$key] = $value;
$array1['all_url'] = substr($string, 0, strlen($string) - 1);
print_r($array1);
答案 4 :(得分:0)
如果您确定在阵列的开头(标题,状态)上总是有这两个字段,那么您可以拥有类似的东西..
<?php
// Consider you have an array similar to this
$yourArray = array(
'title' => 'something',
'status' => 'something',
'url_1' => 'http://someurl.com',
'url_2' => 'http://someurl.com',
'url_3' => 'http://someurl.com'
);
$newArray['title'] = array_shift($yourArray);
$newArray['status'] = array_shift($yourArray);
// Now $yourArray should only contain the url_X fields so...
$newArray['all_url'] = implode(',', $yourArray);
因此,array_shift将检索并删除数组的第一个元素,通过使用它两次,您将从数组中删除标题和状态,留下url_X字段,然后您可以使用{ {3}}合并剩余的数组项,使用第一个参数作为 glue (参见php文档)。