2013-03-25 2 views
0

Мой код выглядит следующим образомusort() не работает после того, как массив

$results = array(); 
$results[] = json_decode("json api response url", true); 
$results[] = json_decode("json api response url 2", true); 
$results[] = json_decode("json api response url 3", true); 
foreach($results as $result) { 
    $decoded = $result['Info']; 
    usort($decoded, function($a, $b) { return $a['price'] > $b['price'] ? 1 : -1; }); 
    foreach($decoded as $row) { 
     echo $row['price']; 
    } 
} 

JSON массив возвращается следующим

["Info"]=> 
[0]=> 
array(13) { 
    ["price"]=> 
    int(3000) 
} 
[1]=> 
array(13) { 
    ["price"]=> 
    int(5000) 

это делает usort для каждого json_decode réponse вместо всех их вместе, это их путь вокруг этого или нет?

+0

Удалите его из петли. – str

+0

Объедините свои три массива данных в одну перед сортировкой. – CBroe

+0

Несвязанный: 'json_decode (" json api response url "), true);' Есть слишком много закрывающих скобок (а также две другие строки) – scones

ответ

1

Я думаю, что вы хотите, чтобы объединить все ответы JSON и объединить их, вместо того, чтобы создавать 3 разных элемента массива в результатах []; Посмотрите на array_merge():

$result = array(); 
$arr1 = json_decode("json api response url", true); 
$arr2 = json_decode("json api response url 2", true); 
$arr3 = json_decode("json api response url 3", true); 

$result = array_merge($arr1['Info'], $arr2['Info'], $arr3['Info']); 

$decoded = $result; 
usort($decoded, function($a, $b) { return $a['price'] > $b['price'] ? 1 : -1; }); 
foreach($decoded as $row) { 
    echo $row['price']; 
} 
+0

любые небольшие примеры, пожалуйста? –

+0

см. Мое редактирование выше – Husman

+0

все еще не работает, только обрабатывает '$ arr3' по какой-то причине –

2

Вы выполняете usort для каждого элемента внутри массива. Попытайтесь выполнить команду usort перед тем, как вы зацикливаете результаты. Я не знаю, будет ли это работать, но это должно указывать на правильное направление.

$results = array(); 
$results[] = json_decode("json api response url", true); 
$results[] = json_decode("json api response url 2", true); 
$results[] = json_decode("json api response url 3", true); 

usort($results, function($a, $b) { 
    return $a['Info']['price'] > $b['Info']['price'] ? 1 : -1; 
}); 

foreach($results as $result) { 
    // do your looped stuff 
} 
+0

, который все еще не работает, он просто производит тот же эффект –

+0

@ Любой проверяет количество закрывающейся скобки на инструкции json_decode. У вас слишком много. – War10ck

+0

Не знаю, откуда они пришли, исправлено. –

0
$results = array(); 
$results[] = json_decode("json api response url", true); 
$results[] = json_decode("json api response url 2", true); 
$results[] = json_decode("json api response url 3", true); 

function cmp($a, $b) 
{ 
    if ($a == $b) { 
     return 0; 
    } 
    return ($a < $b) ? -1 : 1; 
} 

usort($results, "cmp"); 

foreach($results as $row) { 
    echo $row['price']; 
} 
+0

производит то же, что и в оригинале, спасибо в любом случае –