Переиндексация массива путем сопоставления значения - PullRequest
1 голос
/ 20 апреля 2011

Я пытаюсь манипулировать порядком сортировки массива.Я хотел бы получить соответствующий фрукт - в данном случае яблоко - в качестве третьего индекса в массиве.

$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 ]

1 голос
/ 20 апреля 2011

попробуйте это

, хотя это долгий путь, но он исправен независимо от того, где в данный момент яблоко

<code>$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 "
";

DEMO

0 голосов
/ 20 апреля 2011

Я полагаю, что при прохождении цикла foreach происходят следующие события:

  1. $i = 0, array('fruit' => 'apple', 'color' => 'red') обрабатывается и $array_inStock['3'] = array('fruit' => 'apple', 'color' => 'red') создается
  2. $i = 1, array('fruit' => 'banana', 'color' => 'yellow') обработано и $array_inStock['1'] = array('fruit' => 'banana', 'color' => 'yellow') создано
  3. $i = 2, array('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') ...

Что Вы должны сделать вместо этого:

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

В результате индекс Apple будет 3 ...

0 голосов
/ 20 апреля 2011

Попробуйте это :::


$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);
0 голосов
/ 20 апреля 2011

Я неправильно читаю это или ваши строки

$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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...