我有一个这样的数组:
(
(0) => Array
(
(uid) => '100',
(name) => 'Blue t-shirt 4 years',
(ean) => '123456'
),
(1) => Array
(
(uid) => '5465',
(name) => 'blue shirt 24 years',
(ean) => '123'
),
(2) => Array
(
(uid) => '40489',
(name) => 'Shirt 4 Years',
(ean) => '12345'
)
);
我试图计算数组中有多少条目包含键名上的所有单词"衬衫4年"不区分大小写或具有相同的“ean”#39;号。
在这种情况下会返回2.最好的方法是什么?
答案 0 :(得分:0)
这是两个不同的目标。第一个(计数键名称)是一个简单的foreach
循环
第二个逻辑要求你为每个ean
提供一个计数器数组,循环遍历数组并将每个ean
计入一个数组槽。然后你可以遍历数组并找到那些有计数> 1
通过相同的循环组合两个将起作用,但是你需要分析第二个条件。
答案 1 :(得分:0)
如果匹配的字符串并将其计入变量,则需要遍历数组并逐个检查。
<?php
$array = [
["uid"=>'100', 'name'=>'Blue t-shirt 4 years', 'ean'=>'123456'],
["uid"=>'5465', 'name'=>'blue shirt 24 years', 'ean'=>'123'],
["uid"=>'40489', 'name'=>'Shirt 4 Years', 'ean'=>'12345']
];
echo("It's ".countArrayVal($array, 'name', 'shirt 4 years'));
function countArrayVal($array, $key, $search){
$count = 0;
for ($i=0; $i < count($array); $i++) { //Loop
if(stripos($array[$i][$key], $search)!==false) //Check matched string
$count++; //Update the counter
}
return $count; //Return count
}
答案 2 :(得分:0)
You can prepare regex that matches provided words in any order:
function words_regex(array $words) {
$regex = array_reduce($words, function($carry, $word) {
return $carry . '(?=.*\b' . preg_quote($word) . '\b)';
}, '/');
return $regex . '.*/i';
}
Having this function you can filter items and count them:
$regex = words_regex($words);
$count = count(array_filter($array, function($item) use ($regex) {
return preg_match($regex, $item['name']);
}));
Here is working demo的链接文字。