通过匹配值重新索引数组

时间:2011-04-20 09:27:05

标签: php sorting

我正在尝试操纵数组的排序顺序。我想得到匹配的水果 - 在这种情况下是苹果 - 作为阵列上的第三个索引。

$array_fruit[] = array('fruit' => 'apple', 'color' => 'red');  
$array_fruit[] = array('fruit' => 'banana', 'color' => 'yellow');  
$array_fruit[] = array('fruit' => 'kiwi', 'color' => 'green');  
$array_fruit[] = array('fruit' => 'orange', 'color' => 'orange'); 
$array_fruit[] = array('fruit' => 'strawberry', 'color' => 'red'); 
$array_fruit[] = array('fruit' => 'lemon', 'color' => 'yellow');  

$i = 0;  

$array_inStock = array();  

foreach($array_fruit as $fruit)  
{  
    if($fruit['fruit'] == 'apple')  
    {  
        $array_inStock['3'] = array('fruit' => $fruit['fruit'], 'color' => $fruit['color']);  
    }  
    else  
    {  
        $array_inStock[$i] = array('fruit' => $fruit['fruit'], 'color' => $fruit['color']);  
    }  
    $i++;  
}  

asort($array_inStock);

print_r($array_inStock);

我不明白这里出了什么问题。有人有想法吗?重要的问候。

4 个答案:

答案 0 :(得分:1)

试试这个

虽然这是一个漫长的方式,但无论目前苹果在哪里都可以完美无缺。

$array_stock =array();$i=0;
foreach($array_fruit as $k=>$v)
{
if($v['fruit'] =='apple')
    {
        $array_stock[3]=$v;
        if($k>3)
            array_push($array_stock,$array_fruit[3]);
        continue;
    }
if(array_key_exists($i,$array_stock))
{
    array_push($array_stock,$v);
}
else
{
    $array_stock[$i]=$v;
    $i++;
}
}

ksort($array_stock);
echo "<pre>";
print_r($array_stock);
echo "</pre>";

DEMO

答案 1 :(得分:0)

我误读了这个或做了你的行

$array_fruit[] = array('fruit' => 'apple', 'color' => 'red');  
$array_fruit[] = array('fruit' => 'banana', 'color' => 'yellow');
etc.

每次重写数组的内容?相反,你想要

$array_fruit[0] = array('fruit' => 'apple', 'color' => 'red');  
$array_fruit[1] = array('fruit' => 'banana', 'color' => 'yellow');
etc.

答案 2 :(得分:0)

我想通过foreach循环有这样的事件:

  1. $i = 0array('fruit' => 'apple', 'color' => 'red')已处理,$array_inStock['3'] = array('fruit' => 'apple', 'color' => 'red')已创建
  2. $i = 1array('fruit' => 'banana', 'color' => 'yellow')已处理,$array_inStock['1'] = array('fruit' => 'banana', 'color' => 'yellow')已创建
  3. $i = 2array('fruit' => 'kiwi', 'color' => 'green')已处理,$array_inStock['2'] = array('fruit' => 'kiwi', 'color' => 'green')已创建
  4. $i = 3 !!! array('fruit' => 'orange', 'color' => 'orange')已处理,$array_inStock['3'] = array('fruit' => 'orange', 'color' => 'orange')已创建覆盖第一个已处理的array('fruit' => 'apple', 'color' => 'red') } ...
  5. 你应该做什么:

    foreach($array_fruit as $fruit) {  
        if($fruit['fruit'] == 'apple') {  
            $array_inStock[3] = $fruit;
        } else if($i != 3) {
            $array_inStock[$i] = $fruit;
            $i++;
        }
    }
    

    最终苹果将成为指数3 ...

答案 3 :(得分:0)

试试这个:::


$array_fruit = array();  
$array_fruit[] = array('fruit' => 'apple', 'color' => 'red');  
$array_fruit[] = array('fruit' => 'banana', 'color' => 'yellow');  
$array_fruit[] = array('fruit' => 'kiwi', 'color' => 'green');  
$array_fruit[] = array('fruit' => 'orange', 'color' => 'orange');  

print_r($array_fruit);

$i = 0;  

$array_inStock = array();  

foreach($array_fruit as $fruit)  
{  
    if($fruit['fruit'] == 'apple')  
    {  
        $array_inStock['3'] = $fruit;  
    }  
    else  
    {  
        $array_inStock[$i] = $fruit;
        $i++;  
    }      
}  

asort($array_inStock);
print_r($array_inStock);