按键拆分数组

时间:2014-12-11 09:37:44

标签: php

我有一个包含以下键的数组:

Array
{
    [vegetable_image] =>
    [vegetable_name] =>
    [vegetable_description] =>
    [fruit_image] =>
    [fruit_name] =>
    [fruit_description] =>
}

我想基于前缀(vegetable_和fruit_)拆分它们,这可能吗?

目前,我正在尝试array_chunk(),但是如何将它们存储到2个独立的数组中呢?

[vegetables] => Array { [vegetable_image] ... }
[fruits] => Array { [fruit_image] ... }

5 个答案:

答案 0 :(得分:1)

这应该适合你:

$fruits = array();
$vegetables = array();

foreach($array as $k => $v) {
    if(strpos($k,'fruit_') !== false)
        $fruits[$k] = $v;
    elseif(strpos($k,'vegetable_') !== false)
        $vegetables[$k] = $v;
}

例如,请参阅:http://ideone.com/uNi54B

答案 1 :(得分:1)

开箱即用

function splittArray($base_array, $to_split, $delimiter='_') {
   $out = array();
   foreach($to_split as $key) {
      $search = $key.delimiter;
      foreach($base_array as $ok=>$val) {
        if(strpos($ok,$search)!==false) {
           $out[$key][$ok] = $val;
        }
   }
   return $out;
 }

 $new_array = splittArray($array,array('fruit','vegetable'));

答案 2 :(得分:1)

可以使用array_reduce()

$array     = ['foo_bar' => 1, 'foo_baz' => 2, 'bar_fee' => 6, 'bar_feo' => 9, 'baz_bee' => 7];
$delimiter = '_';

$result = array_reduce(array_keys($array), function ($current, $key) use ($delimiter) {
        $splitKey                = explode($delimiter, $key);
        $current[$splitKey[0]][] = $key;
        return $current;
}, []);

检查fiddle

只剩下一个:您使用的是不同的表单(例如"vegetable_*" - > "vegetables")。 PHP不够智能,无法用这种语言替代语言(在这种情况下就是英语)。但是如果你愿意,你可以为它创建一系列有效的表格。

答案 3 :(得分:0)

使用explode()

$arrVeg = array();
$arrFruit = array();
$finalArr = array();

foreach($array as $k => $v){
  $explK = explode('_',$k);
  if($explK[0] == 'vegetable'){
     $arrVeg[$k] = $v;
  } elseif($explK[0] == 'fruit') {
     $arrFruit[$k] = $v;
  }
}

$finalArr['vegetables'] = $arrVeg;
$finalArr['fruits'] = $arrFruit;

答案 4 :(得分:0)

使用简单的PHP数组遍历和substr()函数。

<?php
$arr = array();
$arr['vegetable_image'] = 'vegetable_image';
$arr['vegetable_name'] = 'vegetable_name';
$arr['vegetable_description'] = 'vegetable_description';
$arr['fruit_image'] = 'fruit_image';
$arr['fruit_name'] = 'fruit_name';
$arr['fruit_description'] = 'fruit_description';

$fruits = array();
$vegetables = array();
foreach ($arr as $k => $v) {
    if (substr($k, 0, 10) == 'vegetable_') {
        $vagetables[$k] = $v;
    }
    else if (substr($k, 0, 6) == 'fruit_') {
        $fruits[$k] = $v;
    }
}
print_r($fruits);
print_r($vagetables);

Working Example