不确定我是否接近这个最佳方式,可能不是。
我有一个名为$ search的数组,其元素为'dog'和'cat'。我想搜索名为$ array的2d数组,并存储每行的第一个元素(它的数字),如果该行包含'dog'和'cat'的元素。到目前为止我有这个:
//create 2d array
$array = array(
array(1, 'dog', 'cat','sup'),
array(2, 'dog', 'fish', 'cow'),
array(3, 'dog', 'cat'),
array(4, 'monkey', 'rabbit', 'king', 'fish', 'duck')
);
//create user search array
$search = array('dog', 'cat');
//create get results array:
$results = array();
//get rows with matches of user search and push to results array:
$rows = count($array);
for ($row = 0; $row < $rows; $row++) {
$cols = count($array[$row]);
for($col = 0; $col < $cols; $col++ ) {
for($i = 0; $i < $cols; $i++){
if($search[$i] == $array[$row][$col]){
//not sure what to do here...
array_push($results, $array[$row][0]);
//...
}
}
}
}
//check results
var_dump($results);
所以,我希望只将这些行推送到结果数组:
array(1, 'dog', 'cat','sup'),
array(3, 'dog', 'cat')
看起来像:
array (size=2)
0 => int 1
1 => int 3
答案 0 :(得分:1)
不要对数组使用for
循环,请使用专为此任务设计的foreach
。
如果使用$array
和{{1将搜索数组的大小与$array
项目与搜索数组之间的交集大小进行比较,您可以找到所需的array_intersect
项目}}:
count
答案 1 :(得分:0)
只需从$array
中取一个项目,然后检查它是否包含来自$search
的所有值。
示例:
foreach ($array as $item) {
foreach ($search as $sItem) {
if (!in_array($sItem, $item))
continue 2;
}
$results[] = $item[0];
}
答案 2 :(得分:0)
您可以使用.*
功能
用此
替换for循环in_array
结果将是
//get rows with matches of user search and push to results array:
for($i=0;$i<sizeof($array);$i++){
for($j=0;$j<sizeof($search);$j++){
if (!in_array($search[$j], $array[$i]))
continue 2;
}
$results[] = $array[$i][0];
}
//check results
var_dump($results);