通过数组键中的字符拆分数组

时间:2018-06-11 12:37:29

标签: php arrays

我有以下数组...

foreach

是否有一种简单的方法可以缩短数组以仅显示包含C的键?或拆分数组,其中1个数组有C,1个数组有S和1个数组。我不介意新数组是否有不同的名称。

根据从数据库返回的信息,仅数字,C和S的重复次数将有所不同。所以我不能使用array_slice和array_chunk默认的设计执行方式。

我知道我可以使用key => value循环遍历strpos()对和我们$('#show').on('click', function () { $('.center').show(); $(this).hide(); }) $('#close').on('click', function () { $('.center').hide(); $('#show').show(); })来查找C,S和只是数字;但是,我希望通过数组函数可能有更好的方法。

4 个答案:

答案 0 :(得分:1)

您可以使用array_filter。例如:

$array = array(
"1" => "0",
"2" => "5",
"5" => "7",
"1C" => "0",
"2C" => "5",
"5C" => "10",
"1S" => "15",
"5S" => "20"
);
$arrayWithC = array_filter($array, function($key) {
    return strpos($key, 'C') !== false;
}, ARRAY_FILTER_USE_KEY);

在这种情况下,ARRAY_FILTER_USE_KEY标志用于仅传递回调函数的数组键。

答案 1 :(得分:1)

这是一个循环选项,可能会也可能不会提供更易于使用的数组结构 你决定,我想我会想要这个,但这取决于你如何使用它。

Foreach($array as $key => $item){
    If(!is_numeric(substr($key, -1))){
        $new[substr($key, -1)][substr($key, 0,1)] = $item;
    }Else{
        $new[] = $item;
    }
}

Var_dump($new);

它将法线放在主数组中,然后将子阵列放在S和C项

https://3v4l.org/Aj9ln

答案 2 :(得分:1)

您可以使用array_walk并检查密钥是否包含C

$array = array("1" => "0", "2" => "5", "5" => "7", "1C" => "0", "2C" => "5", "5C" => "10", "1S" => "15", "5S" => "20");
$keyContainsC = [];
array_walk($array, function ($value, $key) use (&$keyContainsC) {
    if (strpos($key, 'C') !== false) $keyContainsC[$key] = $value;
});

print_r($keyContainsC);

或创建一个数组,您可以通过键访问已过滤的数组:

array_walk($array, function ($value, $key) use (&$result) {
    if (strpos($key, 'C') !== false) $result['C'][$key] = $value;
    if (strpos($key, 'S') !== false) $result['S'][$key] = $value;
    if (strpos($key, 'C') === false && strpos($key, 'S') === false) $result['NR'][$key] = $value;
});

print_r($result['S']);

Test

答案 3 :(得分:1)

你可以这样做:

$array = array(
  "1" => "0",
  "2" => "5",
  "5" => "7",
  "1C" => "0",
  "2C" => "5",
  "5C" => "10",
  "1S" => "15",
  "5S" => "20"
);

# Define how you want to split your array
$keySplitingData = [
  "C" => function($key){
    return strpos($key, 'C') !== false;
  },
  "S" => function($key){
    return strpos($key, 'S') !== false;
  },
  "numbers" => function($key){
    return is_numeric($key);
  },
];

foreach($keySplitingData as $k => $fn){
   ${"array_with_" . $k} = array_filter($array, $fn, ARRAY_FILTER_USE_KEY);
}

var_dump($array_with_C); /* =>
array(3) {
  ["1C"]=>
  string(1) "0"
  ["2C"]=>
   string(1) "5"
  ["5C"]=>
  string(2) "10"
}
*/