Turn this array into a matrix
Jelly, 11 bytes
WẋLŒDUṙLFsL
Try it online!
Explanation
Input: array z
WẋL length(z) copies of z
ŒD Diagonals (starting with main diagonal)
U Reverse each
ṙL Rotate left length(z) places
(now the top-left diagonal is in front)
F Flatten
sL Split into chunks of size length(z)
Python 2, 105 96 bytes
-1 and -4 and -4 bytes thanks to Flp.Tkc
a=input()
n=len(a)
L,M=[],[]
for i in range(n):L+=a[i::-1];M+=a[:i:-1]
print zip(*[iter(L+M)]*n)
The for loop adds the items like in the description, the real magic happens in the zip which is from here
JavaScript (ES6) 100 101 105
a=>eval("for(u=r=[],i=l=a.length;i+l;i--)for(j=l;j--;v&&((u%=l)||r.push(s=[]),s[u++]=v))v=a[j-i];r")
Less golfed
a => {
u = 0
for(r=[], i=l=a.length; i+l>0; i--)
for(j=l; j--; )
{
v = a[j-i]
if (v)
{
u %= l
if (u==0) r.push(s=[])
s[u++] = v
}
}
return r
}
Test
F=
a=>eval("for(u=r=[],i=l=a.length;i+l;i--)for(j=l;j--;v&&((u%=l)||r.push(s=[]),s[u++]=v))v=a[j-i];r")
function update() {
var a=I.value.match(/\d+/g)
if (a) {
var r=F(a)
O.textContent = r.join`\n`
}
}
update()
<input id=I value='1 2 3 4 5' oninput='update()'>
<pre id=O></pre>