我有以下数组...
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和只是数字;但是,我希望通过数组函数可能有更好的方法。
答案 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项
中答案 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']);
答案 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"
}
*/