Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP数组值的自定义融合_Php_Arrays_Count - Fatal编程技术网

PHP数组值的自定义融合

PHP数组值的自定义融合,php,arrays,count,Php,Arrays,Count,早上好! 我正在使用SQL查询从帖子中获取类别ID。如果几个帖子来自同一类别,那么它们可以具有相同的ID。这是我的阵列: Array ( [0] => stdClass Object ( [catid] => 48 ) [1] => stdClass Object ( [catid] => 77 ) [2] => stdClass Object ( [catid] => 57 ) [3] => stdClass Object ( [catid] =&g

早上好! 我正在使用SQL查询从帖子中获取类别ID。如果几个帖子来自同一类别,那么它们可以具有相同的ID。这是我的阵列:

Array ( 
[0] => stdClass Object ( [catid] => 48 )
[1] => stdClass Object ( [catid] => 77 )
[2] => stdClass Object ( [catid] => 57 )
[3] => stdClass Object ( [catid] => 57 )
[4] => stdClass Object ( [catid] => 38 ))
现在我需要得到所有不同catid的总和(在本例中为4)。我可以通过在我的SQL中使用“distinct”或“groupby”来实现这一点,无论如何我没有这样做,因为它们会弄乱我的结果

问题是,某些CATID应该被替换。例如,catid 48是“硬盘”,77是“存储”,因此48应该是77的一部分(因此总和现在是3)。我已经得到了一个应该合并的CATID数组:

$catMergeArray = array(
38=>74,36=>46,34=>72,37=>73,40=>76,39=>75,103=>85,102=>81,53=>82,51=>80,50=>79,
55=>90,56=>91,57=>92,58=>93,55=>90,104=>68,106=>69,65=>70,66=>86,108=>95,48=>77,
172=>171,105=>170,111=>169);
利用

foreach ($result as $cats) {
 $newarray[] = $cats->catid;
}
我将数组更改为

$newarray = Array ([0] => 48 [1] => 77 [2] => 57 [3] => 57 [4] => 38)

然后(就像$catMergeArray中提到的,48=>77)删除
[0]=>48
值,这样结果应该是
$catids=Array([0]=>77[1]=>57[2]=>38)
,这样我就可以计算元素,并将3作为处理结果。

用php做可能更好。这里有一个粗略的想法和一些伪代码。 可能不是很有效,也不是很优雅,但它应该有效

$list_of_id = mysqli_fetch_array(query("distinct catId"));
for($i=0;$i<count($list_of_id);$i++){
  $parent_cat_id = $catMergeArray[$list_od_id[$i]];
  if ($parent_cat_id > 0){
    for($j=0;$j<count($list_of_id);$j++){
      if($list_of_id[$j]==$parent_cat_id){
        unset($list_of_id[$i]);
        break;
      }
    }
  }
}
echo count($list_of_id);
$list\u of_id=mysqli\u fetch\u数组(查询(“不同的catId”);
对于($i=0;$i 0){

对于($j=0;$jummm),您是否尝试过使用array\u unique

或者,您也可以将它们分组到一个唯一的数组索引中,如下所示:

$summary = array();

foreach( $catids as $catid => $cat){

$summary[$catid][] = $cat;

}

谢谢你的帮助。我现在用这个解决了我的问题:

foreach ($result as $value) {
    $intArray[] = $value->catid;
} 
$uniqueArray = array_unique($intArray);
$cUniqueArray = count($uniqueArray);    

$cma = array(48=>77);

$lenght = $cUniqueArray-1;
for($i = 0; $i <= $lenght; $i++){
    $key = array_search($uniqueArray[$i],$cma);     
    if(is_int($key)){
        $uniqueArray[$i] = $key;
    }
}
foreach($result作为$value){
$intArray[]=$value->catid;
} 
$uniqueArray=array\u unique($intArray);
$cUniqueArray=计数($uniqueArray);
$cma=阵列(48=>77);
$lenght=$cUniqueArray-1;

对于($i=0;$i很抱歉误解英语不是我的第一语言。我想用PHP!我没有误解,这是一些假的代码,只是为了演示我的概念。我希望你理解我的代码,然后让自己编写自己的。array\u unique不会有帮助,因为我尝试删除/融合不同的值!例如:当我ve 3个ID为77的元素和2个ID为48的元素,我想移除或融合ID为77的元素(这可以通过array_unique实现,没错)但是后来我想把ID为48的元素和77个ID一起移除/融合,这样就只剩下1个元素了。我只需要这个融合/移除后的不同元素的数量,比如说你有这个数组
$catids=array(['device1']=>'cat1',['device1']=>'cat2',['device2']=>'cat1',['device1']=>'cat3']=>'cat1',['device2']=>'cat2',)
应用上面的循环,您将得到以下结果
array('device1'=>array('cat1','cat2','cat3'),'device2'=>array('cat1','cat2'),'device3'=>array('cat1'),'device3'=>array('cat1'))
然后你可以使用数组\u unique谢谢你的回答。你认为它比实际更复杂。当我像你的例子一样发布它时,数组看起来像
$catids=array(['device']=>'cat1',['device']=>'cat2',['device']=>'cat1',['device']=>'cat3')
现在我需要删除重复的条目(是的,我知道如何使用array_unique)并替换所有cat3元素,因为我说过这两个元素都是相同的主类别。删除后,我需要所有元素的数量。你能发布你想要实现的数组/数据结构结果吗?问题是我不知道如何替换
$catMergeArray
中提到的数组中的元素,抱歉,但我认为会使用SQL更容易对这些数据进行排序。这样做就像手动处理一样,数组不知道应该删除哪些确切值。其他解决方案-比较device1和device2数组类别并删除重复项。但在SQL中,我再次遇到一个问题,我需要说一些ID应该像$catMergeArraymaybe I中的其他ID一样处理可以帮助您进行sql查询;)您知道如何使用join吗?是的,有一点。但是在我的sql查询中,我遇到了一些问题,因为它们不知怎么搞砸了我的结果。两天前,我确实为此提出了另一个问题。^^hmm…这不酷:(我认为这很“简单”当我得到一个数组和另一个声明了应该替换什么的数组时,替换数组中的值