Php 如何查找数组项以特定字母开头的所有情况
我想知道我在这里做的事情是否还有其他解决方案:Php 如何查找数组项以特定字母开头的所有情况,php,arrays,multidimensional-array,substring,Php,Arrays,Multidimensional Array,Substring,我想知道我在这里做的事情是否还有其他解决方案: $aArray = array( array('Name' => 'Apple', 'Count' => 10) array('Name' => 'Tomato', 'Count' => 23) array('Name' => 'Tree', 'Count' => 4) array('Name' => 'Pota
$aArray = array(
array('Name' => 'Apple', 'Count' => 10)
array('Name' => 'Tomato', 'Count' => 23)
array('Name' => 'Tree', 'Count' => 4)
array('Name' => 'Potato', 'Count' => 44)
array('Name' => 'Apple', 'Count' => 73)
//Generate string with the 'Name's'
$aNamesMain = [];
$nCounterMain = 0;
$aNamesMain = array_merge($aNamenMais, array_keys($aArray['Name']));
foreach($aNamesMain as $name) {
// Check to see which items start with an A
if (substr('$name', 0, 1) === 'A') { $nCounterMain++; }
}
因此,我想知道在数组中以特定字母开头的'Name'=>
位置找到一个项目的次数<在这种情况下,代码>A。但当我现在开始工作的时候,就像我在上面发布的一样,但是没有更好的方法来实现这一点吗
一些数组函数之类的,因为我一直在尝试PHP手册中的一些,但现在似乎找不到更好的解决方案
这样我就不必使用foreach
或放弃数组合并
如果这是离题的,需要在代码审阅页面上发布,请让我知道,但我认为这是与编程相关的问题。您可以使用a来解决此问题:
//your array containing the items.
$aArray = array(
array('Name' => 'Apple', 'Count' => 10),
array('Name' => 'Tomato', 'Count' => 23),
array('Name' => 'Tree', 'Count' => 4),
array('Name' => 'Potato', 'Count' => 44),
array('Name' => 'Apple', 'Count' => 73)
);
//the character or string you want to search.
$startWithChar = 'A';
//get all items of the array starting with the specified character or string.
$newArray = array_filter($aArray, function($v) use ($startWithChar) {
return strpos($v['Name'], $startWithChar) === 0;
});
echo count($newArray); //2
演示:
这是个不错的选择
$aArray = array(
array('Name' => 'Apple', 'Count' => 10),
array('Name' => 'Tomato', 'Count' => 23),
array('Name' => 'Tree', 'Count' => 4),
array('Name' => 'Potato', 'Count' => 44),
array('Name' => 'Apple', 'Count' => 73),
);
$startWithChar = 'A';
$newArray = array_filter($aArray, function($e) use ($startWithChar) {
return substr($e['Name'], 0, 1) === $startWithChar;
});
echo count($newArray); // 2
您可以使用以下内容:
//initial array
$x =[
['Name' => 'Apple', 'Count' => 10],
['Name' => 'Tomato', 'Count' => 23],
['Name' => 'Tree', 'Count' => 4],
['Name' => 'Potato', 'Count' => 44],
['Name' => 'Apple', 'Count' => 73]
];
$x = array_filter(array_column($x, 'Name'), function($key) {
return (string) substr($key, 0, 1) === 'A' ? true : false;
});
//output array
echo count($x); // should be 2
您可以使用它将数组缩减为唯一值,这里是以字母“A”开头的名称数
$aArray = array(
array('Name' => 'Apple', 'Count' => 10),
array('Name' => 'Tomato', 'Count' => 23),
array('Name' => 'Tree', 'Count' => 4),
array('Name' => 'Potato', 'Count' => 44),
array('Name' => 'Apple', 'Count' => 73)
);
$startWithChar = 'A';
$result = array_reduce($aArray, function($carry, $item) use($startWithChar){
if(strpos($item['Name'], $startWithChar) === 0)
$carry++;
return $carry;
}, 0);
echo $result; //2
为什么不使用
返回$v['Name'][0]==$startWithChar代码>?嗨,塞巴斯蒂安,我真的很喜欢这个解决方案的样子。但是我对这些匿名函数并不十分熟悉。因此,$v['name']
在这种情况下所做的是$v,my$aArray?@OliCrt-因为字符串可能是空的(本例中不是空的,但可能是空的)。@H.Brendan-$v
是$aArray
数组的值之一。array\u过滤器
运行$aArray
的所有值,$v
是当前值,提供给回调函数(在本例中为匿名函数)。@SebastianBrosch感谢您的解释,我有点理解这里发生了什么,也感谢您的快速响应:)感谢您的反应,另一个家伙稍早一点,并没有创建像array_filter这样无用的数组,很好。