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这样无用的数组,很好。