内爆阵列,请帮助我

时间:2014-07-12 09:46:08

标签: php arrays implode

我有阵列:

array (
    [name_0]  => 'ABC',
    [price_0] => '5000',
    [name_1]  => 'DEF',
    [price_1] => 499,
    [name_n]  => 'GHI',
    [price_n] => 1000
);

我想得到:name_0 | name_1 | name_n ....和price_0 | price_1 | price_n ....

3 个答案:

答案 0 :(得分:2)

如果这些都是名称/价格对,并且您想要这些值,则可以利用PHP 5.5的array_column()函数:

$chunked = array_chunk($array, 2);
$names = array_column(
    $chunked,
    0
);
$names = implode('|', $names);

$prices = array_column(
    $chunked,
    1
);
$prices = implode('|', $prices);

如果您正在运行早期版本的PHP:

$chunked = array_chunk($array, 2);
$names = array_map(
    function ($value) {
        return $value[0];
    },
    $chunked
);
$names = implode('|', $names);

$prices = array_map(
    function ($value) {
        return $value[1];
    },
    $chunked
);
$prices = implode('|', $prices);

答案 1 :(得分:0)

我愿意:

$temp = array_flip($array);
sort($temp);
$str = implode("|", $temp);

只要您希望name首先出现,这似乎有效,因为n在字母表中较早。如果您希望相应的值以相同的顺序进行内爆,而不是键:

ksort($array);
$str = implode("|", $array);

答案 2 :(得分:0)

尝试以下内容

$a = array (
    'name_0' => 'ABC',
    'price_0' => '5000',
    'name_1' => 'DEF',
    'price_1' => 499,
    'name_n' => 'GHI',
    'price_n' => 1000
);
$arr_name = array();
$arr_price = array();
foreach($a as $k=>$v){
    if (stripos(strtolower($k), 'name') !== false) {
        $arr_name[$k] = $v;
    }else{
        $arr_price[$k] = $v;
    }
}
$a = array_merge($arr_name, $arr_price);
$res = implode('|', $a);
echo $res;

<强>输出

ABC|DEF|GHI|5000|499|1000